首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >何时将程序集部署到GAC中?

何时将程序集部署到GAC中?
EN

Stack Overflow用户
提问于 2010-03-15 23:14:34
回答 4查看 12.2K关注 0票数 42

我想知道我应该在GAC部署什么样的大会。

案例1:如果在我的解决方案中,多个项目使用log4net.dll,那么应该在GAC中部署它吗?

案例2:如果在一台机器中部署了多个应用程序,每个应用程序都使用log4net.dll,这是否足以将log4net.dll部署到GAC中?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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。

票数 67
EN

Stack Overflow用户

发布于 2010-03-15 23:41:11

log4net.dll的大小为95 of。即使您将它部署了100次,对于今天的硬盘来说也没有什么关系。在可能的情况下,我尽量避开GAC,原因有几点:

  • --它使部署变得更加困难,您必须告诉安装程序要在GAC中放什么。我喜欢创建简单的xcopy (复制一个dir来安装,删除它来卸载)。因为这很简单--但是一旦你必须把东西放到GAC中,它就不那么好用了。

  • ,你必须在你的程序集上签名。当开发人员在他的视觉工作室项目中引用GAC的内容时,当另一个开发人员在他的pc上打开解决方案时,这个引用就会丢失。在成功打开和编译解决方案之前,他首先必须将所需的程序集放到GAC中。那是一个真正的皮塔。我希望能够在没有错误的情况下签出、编译和运行。
票数 14
EN

Stack Overflow用户

发布于 2010-03-15 23:31:20

您应该考虑放入GAC的唯一类型的程序集是一个成熟和稳定的程序集。就log4net而言,如果您很高兴您拥有的版本是稳定的、成熟的,并且您不太可能在短期内更改该版本,那么可以将其放入GAC中。

不要试图将可能发生变化的库放置在GAC中,特别是如果您正在内部开发它们,并且仍然有进一步改进的余地。将它们部署为私有程序集。

我见过人们宣扬共享代码的神奇之处。他们说,“啊,我们将在这个代码更改的同时改进20个应用程序”。问题是,如果你搞错了,你还可以同时销毁20个应用程序。我见过有人说:“我刚刚推出了X网站。你能不能检查一下A网站,确保它们还能正常工作?”

私有程序集可能会很痛苦,但您可能面临的问题仅限于部署它们所针对的特定应用程序。如果你不能百分之百地确定一个组件是不稳定和成熟的,不要把它放在GAC中。

相信我,你会睡得更好。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2451123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档