使用全局程序集缓存(GAC) - 以其设计的方式

Mar*_*son 1 .net c# assemblies gac

以下解决方案是否是在代码中使用GAC库的唯一可能性?

Assembly lib = Assembly.Load("MyLibrary, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=31f5625abd53197f");

Console.WriteLine(lib.GetType("MyClass").GetMethod("Start").Invoke(obj, null));
Run Code Online (Sandbox Code Playgroud)

我有点困惑 - 我已经阅读了很多关于GAC的内容,我知道如何在GAC中签署程序集,安装和卸载程序集,但不知道如何使用它,以及它如何帮助程序员(除了它安全地存储相同库的不同版本).我希望我能正常创建类,而不是被迫调用上面提到的方法.

我不想要任何解决方法,例如:"更改Windows注册表",因为我不认为GAC是为这种操作而设计的.我想要一个简单的答案:GAC的用途是什么,运行时环境是否以某种方式使用它?

当代码变得非常丑陋且难以管理时,使用GAC的重点是什么?或许我错过了什么?也许我应该手动将程序集复制到我的本地文件夹中?但我听说这也很难.

Rob*_*cke 5

海关总署是有帮助你有多个版本 (这是公共密钥是什么-防止名称冲突)安装并排侧组件,并提供给整机,不只是你的应用程序目录.

所以,使用版本号从GAC访问程序集几乎就是GAC的设计方式.;-)

顺便说一句:你不应该动态加载东西.

IOW:如果您已经知道了类名和汇编版本,那么您可以引用该汇编并跳过相当戏剧性的性能损失,不仅动态加载程序集,还通过反射调用方法.(而不是通过接口或代理重用它们)

  • @Marc,不,你不会.看起来你在开发方面混淆了部署.在开发过程中,引用物理文件非常有意义,大多数情况下,当您从另一个项目引用一个项目时,IDE会为您执行此操作.对于应用程序的部署,**可以**将组件安装到GAC中,然后,您也不必将其也放入应用程序目录中. (2认同)