我想知道我应该在GAC部署什么样的大会。
案例1:如果在我的解决方案中,多个项目使用log4net.dll,那么应该在GAC中部署它吗?
案例2:如果在一台机器中部署了多个应用程序,每个应用程序都使用log4net.dll,这是否足以将log4net.dll部署到GAC中?
发布于 2010-03-15 23:30:55
问:我什么时候应该将我的程序集部署到GAC中?
答:从不
真实、诚实、真实的答案:几乎从不
讨论
只有当机器上的多个应用程序将使用程序集、程序集是基础程序(可能被多个应用程序使用)、签名时,以及当您期望几乎永远不会更新该程序集时,才会将其放入GAC中。也许,如果在每个应用程序中部署多个独立版本的DLL,实际上是有害的。
后者的一个例子是:假设您有两个独立的应用程序,独立开发和独立部署。尽管如此,他们还是有可能相互交流的.他们会交换..。一些东西..。在本地机器上进行.NET远程处理。如果在GAC中只有一个程序集,那么这些应用程序就可以保证相互通信能够正常工作。但是,如果每个程序集都有单独的程序集版本,则它们可能无法交换对象。,这是一个如此罕见的事件,您可能不需要它。如果你不确定,那你就不需要它了。
基本的GAC场景是.NET基类库。这些程序集由Microsoft提供。他们是权威的。它们是基础性的。并签了名。他们很少改变。所有应用程序都应该使用相同的DLL副本。因此,它们属于GAC。
相反,您的应用程序DLL不是来自Microsoft的,它们不是基础的,可能也不是签名的。它们的变化更频繁,而且只有很少的应用程序(也许只有一个!)使用每个DLL的。没有GAC。
我可以想象一个硬件设备,比如说一个数码相机,它安装了一个.NET程序集以允许可编程性。在这种情况下,程序集可能很适合GAC。它允许任意.NET应用程序以编程方式访问数码相机。
在我看来,您的log4net示例不足以证明将程序集放入GAC中是合理的。想象一下这样的场景,其中一个应用程序获得了一个更新,作为更新的一部分,它使用了一个新版本的log4net。这次又是什么?是否应该将新的log4net组件放入GAC中?可能不会。
在应用程序之间共享DLL的整个想法植根于内存和磁盘存储不足的前提下。很久以前,那是真的。这不再是真的了。有疑问时,不要使用GAC。
发布于 2010-03-15 23:41:11
log4net.dll的大小为95 of。即使您将它部署了100次,对于今天的硬盘来说也没有什么关系。在可能的情况下,我尽量避开GAC,原因有几点:
,
发布于 2010-03-15 23:31:20
您应该考虑放入GAC的唯一类型的程序集是一个成熟和稳定的程序集。就log4net而言,如果您很高兴您拥有的版本是稳定的、成熟的,并且您不太可能在短期内更改该版本,那么可以将其放入GAC中。
不要试图将可能发生变化的库放置在GAC中,特别是如果您正在内部开发它们,并且仍然有进一步改进的余地。将它们部署为私有程序集。
我见过人们宣扬共享代码的神奇之处。他们说,“啊,我们将在这个代码更改的同时改进20个应用程序”。问题是,如果你搞错了,你还可以同时销毁20个应用程序。我见过有人说:“我刚刚推出了X网站。你能不能检查一下A网站,确保它们还能正常工作?”
私有程序集可能会很痛苦,但您可能面临的问题仅限于部署它们所针对的特定应用程序。如果你不能百分之百地确定一个组件是不稳定和成熟的,不要把它放在GAC中。
相信我,你会睡得更好。
https://stackoverflow.com/questions/2451123
复制相似问题