将共享程序集安装到GAC中以进行开发和构建

时间:2009-06-18 09:47:24

标签: .net build development-environment shared-libraries gac

我在这里阅读了一些关于GAC的帖子以及为什么不应该通过将共享程序集安装到GAC来部署应用程序。我可以看到这一点,因为它应该使客户机上的应用程序更新更容易。

但是,有两个方面我可以看到GAC在开发期间和构建服务器上有用。

例如,如果您使用Microsoft应用程序块,则可以将它们安装到GAC中并在那里引用它们。这是有道理的,因为它比在每个开发人员机器上具有可能不同的路径的绝对引用更容易。它也比拥有所有共享组件的共享网络驱动器更好 - 就是这样做的。

然后,您可能会为构建服务器执行相同的操作。但是,我看到的唯一问题是你有一个使用2.0版应用程序块的应用程序。稍后您将其升级为使用版本3.1。在某些时候,您可能需要重新创建该应用程序的早期版本以测试客户找到的错误,但是当您重新创建构建时,它将获取应用程序块的3.1版而不是最初构建的2.0版。这是真的吗,或者旧项目文件是否仍然引用旧版本的dll,只要它在GAC中?

您对这一点有何看法?

我希望能够将所有版本的共享组件(我们下载或构建)分发给所有开发人员,作为安装到GAC中的MSI,并将“XCOPY”作为应用程序安装程序的一部分部署到客户机器上。这是最好的方法。

2 个答案:

答案 0 :(得分:2)

  

您对这一点有何看法?

我总是将主二进制文件保存在.NET软件项目的Resource / Library文件夹中。显然这个文件夹是版本化的。无论如何,这些天存储很便宜,所以它没有太大的区别。

这有几个目的:

  • 项目是原子的,它们不依赖于GAC中某个库的特定版本。因此,通过简单地检查它就可以很容易地重现之前的修订版。一切都会奏效。
  • 它只需要一台干净的开发机器(当然安装了所有.NET服务包和主要SDK),以便开始检查项目,运行完整的集成构建并开始工作。

当有超过10个不同的项目需要管理时,这会开始产生一些不同。

答案 1 :(得分:0)

旧应用程序将从GAC中选择旧版本的程序集,前提是您不使用较新的程序集重建旧应用程序。每个程序集都将此信息保存在它自己的清单中,该程序集所引用的程序集。如果使用ILDasm tool打开装配体,则可以详细检查装配体的清单,其中包含所有引用装配体的信息。