程序集可以是私有或共享程序集:默认情况下,大多数简单程序都包含一个私有程序集,因为它们并不打算由其他应用程序使用。
若要与其他应用程序共享程序集,则必须将它放置在全局程序集缓存 (GAC) 中。
1、用sn.exe 强名称工具,准备强名称密钥
sn.exe所在位置
如果安装了Visual Stduio,则这些可执行文件就已经安装到你的系统中,则可以在系统所在 目录program filesMicrosoft SDKswindowsv数字.0bin.
同时也可以在visual studio command prompt中输入文件名并回车就可以打开!
命令
sn -k 路径名称.snk
具体参考:Sn.exe(强名称工具) | Microsoft Docs
2、编写一般程序集,然后强名称化
.net 6和.net Core 在项目文件中编写
路径名称.snk
或者在项目属性中
.net FrameWork 项目,修改AssemblyInfo.cs文件以签名当前程序集:
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile(@"d:winappmyKey.snk")](请指定myKey.snk文件的正确路径)
[assembly: AssemblyKeyName("")] |
然后编译生成共享程序集
3、在项目属性中编辑好,程序集版本号、公司等信息
4、将程序集添加到全局程序集缓存中,这里用的是 Gacutil.exe 全局程序集缓存工具将程序集添加到GAC中,GAC目录为C:Windowsassembly
开发中可在在visual studio command prompt中操作, 安装时,cmd到 Gacutil.exe所在目录执行命令操作
安装: gacutil -i 路径程序集
卸载: gacutil -u 路径程序集
安装之后可查看程序集信息: gacutil -l 路径程序集,可以获取
程序集名称,版本号,本地化区域,Public KeyToken
如:GacDemo, Version=1.0.0.1, Culture=neutral, PublicKeyToken=ea1d5d9be27430b1
为引用共享程序集做准备
具体参考:Gacutil.exe(全局程序集缓存工具) | Microsoft Docs
5、其他程序引用 具有强名称的程序集
方法一:在项目中正常 浏览添加引用强名称程序集
方法二:采用Assembly.Load方式
举例:
int res = 0;
Assembly GacDemo = Assembly.Load("GacDemo, Version=1.0.0.1, Culture=neutral, PublicKeyToken=ea1d5d9be27430b1");
Type[] data = GacDemo.GetTypes();
foreach (Type T in data)
{
if (T.Namespace == "GacDemo" && T.Name == "TMath")
{
MethodInfo GetMeth= T.GetMethod("GetShared");
if (GetMeth != null)
{
object o = Activator.CreateInstance(T);
res = (int)GetMeth.Invoke(o, null);
//GetMeth.Invoke(o, null);
Console.WriteLine($"User2 T {res}");
}
}
}
Console.ReadKey();
可参考微软官方:如何:与其他应用程序共享程序集 | Microsoft Docs



