[英]What are the advantages and disadvantages of using the GAC?
最重要的是,是否有必须使用全局程序集缓存或无法使用它的情况?
总而言之,如果你稍后看到主要的性能提升,如果你把你的组件放入GAC和NGEN中,那么就去做吧,否则不要打扰。 GAC更适合于期望在更多应用程序之间共享库的框架,在99%的情况下,您不需要它。
优点:
坏处:
建议:将GAC留给MS和朋友。 千兆字节现在非常便宜。
GAC也可以由需要提升权限的程序集使用,以代表不太受信任的代码执行特权操作(例如,部分信任ASP.NET应用程序)。
例如,假设您有一个部分信任的ASP.NET应用程序,它需要执行需要提升权限的任务,即完全信任 。 解决方案是将需要提升权限的代码放入单独的程序集中。 程序集标有AllowPartiallyTrustedCallers
属性,包含特权逻辑的类使用PermissionSet属性标记,如下所示:
[PermissionSet(SecurityAction.Assert, Unrestricted=true)]
我们的程序集将具有强名称(已签名),然后部署到GAC中。
现在,我们部分受信任的应用程序可以利用GAC中的受信任程序集来执行特定且狭窄的特权操作集,而不会失去部分信任的好处。
如果您要发布包含多个程序集的可重用库,但只有少数几个构成外观,则可以考虑将程序集安装到GAC中(如果该程序包已安装到开发人员的PC中)。
想象一下,您运送6个组件,这6个组件中只有一个包含一个外观 - 即其他5个仅由外观本身使用。 你发货:
使用您的项目的开发人员想在他们自己的项目中引用MyProduct.Facade.dll 。 但是当他们的项目运行时,它必须能够加载它所引用的所有程序集 - 递归。 如何实现这一目标? 通常,它们必须在GAC中的Bin文件夹中可用:
注意:最后一个选项不会让您在将项目运送到生产PC时执行相同操作。 您可以在Bin文件夹中发送所有程序集,也可以将它们安装到GAC中 - 所有这些都取决于您的所有愿望。
因此,所描述的解决方案显示了在开发期间将第三方程序集放入GAC的优势。 它与生产无关。
您可能会发现,安装到GAC主要是为了解决所需程序集(依赖项)的位置问题。 如果将程序集安装到GAC中,您可能会认为它存在于任何应用程序“附近”。 这就像将.exe的路径添加到PATH变量,但是以“托管方式”。 - 当然,这是相当简化的描述;)
我认为使用GAC的最大优势之一是您可以为您的应用程序注册并提供相同程序集的多个版本。 就我个人而言,我不喜欢它如何限制机器之间的移动(我不喜欢说,检查新的VPC上的源代码并通过一系列步骤让它运行因为我必须注册的东西GAC)
在我的一生中,我可能有一个应用程序,我必须在GAC中放置一个程序集,只是因为这些程序集是许多应用程序将使用它的框架的一部分,并且将它们放入GAC似乎是正确的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.