What are the advantages and disadvantages of using the GAC?最重要的是,是否存在必须使用全局程序集缓存或无法使用全局程序集缓存的情况?
因此,总而言之,从简单开始,如果以后将组件放入GAC和NGEN中,然后再看到主要的性能提升,那就去做吧,否则就不要打扰了。 GAC更适用于期望在更多应用程序之间共享库的框架,在99%的情况下,您不需要它。 优点:
坏处:
建议:将GAC留给MS和朋友。千兆字节现在非常便宜。 要求提高权限的程序集也可以使用GAC来代表不太受信任的代码(例如,部分信任的ASP.NET应用程序)执行特权操作。
例如,假设您有一个部分信任的ASP.NET应用程序,该应用程序需要执行需要提升特权的任务,即完全信任。解决方案是将需要提升特权的代码放入单独的程序集中。程序集用
我们的程序集将被赋予一个强名称(签名),然后部署到GAC中。 现在,我们的部分受信任的应用程序可以利用GAC中的受信任程序集来执行一组特定且狭窄的特权操作,而不会失去部分信任的好处。 如果要运送包含多个程序集的可重用库,但只有极少数组成一个外观,则可以考虑将程序包安装到GAC(如果该程序包已安装到开发人员的PC上)。 想象一下,您运送了6个装配,而这6个装配中只有一个包含立面-即其他5个仅由立面本身使用。您运送:
使用您的项目的开发人员只想在自己的项目中引用MyProduct.Facade.dll。但是,当他们的项目运行时,它必须能够递归加载其引用的所有程序集。如何做到这一点?通常,它们必须在GAC中的Bin文件夹中可用:
注意:在将项目运送到生产PC时,最后一个选项不会使您做同样的事情。您可以将所有程序集都放在Bin文件夹中,也可以将它们安装到GAC中-所有这些都取决于您的意愿。 因此,所描述的解决方案显示了在开发过程中将第三方程序集放入GAC的优势。它与生产无关。 您可能会发现,安装到GAC中主要是为了解决所需组件(依赖项)的位置问题。如果某个程序集已安装到GAC中,则您可能会认为该程序在"附近"存在任何应用程序。这就像将.exe的路径添加到PATH变量中一样,但是是以"托管方式"进行的。 -当然,这是简化的说明;) GAC与完全信任一起运行,并且可由Web应用程序外部的应用程序使用。例如,Sharepoint中的Timer Jobs必须位于GAC中,因为sptimer服务是一个单独的进程。 "完全信任"部分也是安全问题的可能来源。当然,您可以使用代码访问安全性,但是不幸的是,使用CAS时,我看不到太多程序集:( / bin文件夹可以锁定为中级,通常情况下很好。 丹尼尔·拉森(Daniel Larson)在CAS上也有一篇文章,其中详细介绍了差异。 我认为使用GAC的最大优点之一是,您可以注册同一程序集的多个版本,并且可用于您的应用程序。就我个人而言,我不喜欢它如何限制机器之间的移动(我不喜欢说,在新的VPC上检查源代码并经过一系列步骤使其运行,因为我必须在其中注册内容GAC) 一生中,我可能只有一个应用程序需要在GAC中放置程序集,这仅仅是因为这些程序集是框架的一部分,许多应用程序都会使用它,将它们放入GAC似乎是正确的。 |