此外,是否存在必须使用全局程序集缓存或不能使用全局程序集缓存的情况?
总之,简单起见开始,如果您稍后发现将程序集放入GAC并ngened可以获得重大性能提升,请尝试,否则不要费心。 GAC更适合框架,其中预计库将在多个应用程序之间共享,在99%的情况下,您不需要它。
好处:
坏处:
建议:把GAC留给微软和友好的开发者。现在存储一千兆非常便宜。
GAC也可被用于需要提升权限以代表不太信任的代码执行特权操作的程序集(例如,部分信任的ASP.NET应用程序)。
例如,假设您有一个部分信任的ASP.NET应用程序,需要执行需要提升权限(即完全信任)的任务。解决方案是将需要提升权限的代码放入单独的程序集中,该程序集标记有AllowPartiallyTrustedCallers属性,包含特权逻辑的类标记有PermissionSet属性,类似于:
[PermissionSet(SecurityAction.Assert, Unrestricted=true)]
我们的程序集会被赋予一个强名称(签名),然后部署到全局程序集缓存中。
现在,我们的部分信任应用程序可以利用全局程序集缓存中的受信任程序集来执行一组特定而狭窄的特权操作,而不会失去部分信任的好处。
我认为使用全局程序集缓存(GAC)的最大优势之一是可以注册并使多个相同版本的程序集可供应用程序使用。但就个人而言,我不喜欢它限制了从一台机器到另一台机器的移动(我不喜欢在新的虚拟计算机上检查源代码并执行一系列步骤以使其运行,因为我必须在GAC中注册一些内容)。
在我的生涯中,我只遇到过一个需要将程序集放入全局程序集缓存(GAC)的应用程序。这是因为这些程序集是许多应用程序都会使用的框架的一部分,将它们放入GAC似乎是正确的选择。