2009-12-16 109 views
5

我必须向GAC部署少量程序集。我刚刚有几个关于(我)了解GAC的问题。真让我困惑。GAC和汇编版本

我想知道更改程序集和文件版本的版本。 GAC dll将被安装应用程序取代的可能组合中有哪些。和GAC文件的基本管理。

我会使用更好的了解GAC的下面的例子说明我的问题:

假设我有产品A和B。

A和B均指在GAC中安装的myfile.dll。
(ⅰ)集版本:[1.0.0.0]
(ⅱ)组件文件版本:[2.0.0.0](有意不同,以避免更多的混乱)

  1. 假设我有施加一个错误修复在myfile.dll中。 然后我应该更改哪个版本?

  2. 假设我有一个说'ANEW'的新版本,那么应该更改哪个版本,以便A,B ANEW都可以并排居住的 。

  3. 假设如果我在'G'中安装了myfile.dll,现在我尝试安装 'B',它具有错误修复的gac dll ..然后哪些版本要更改以便更改反映在'一个'。

  4. 与Q3相同,但B的变化不应该反映在'A'中。

  5. 假设'A'与myfile(1.0.0.0)一起安装。现在假设'B'正在安装 myfile(1.x.y.z).. GAC文件将被替换?

  6. 假设'A'与myfile(1.0.0.0)一起安装。现在假设'B'与 myfile(2.x.y.z)一起安装.. GAC文件将被替换?

  7. 假设'A'与myfile(1.0.0.0)一起安装。现在假设'B'与 myfile(1.0.0.0)一起安装,假设版本没有改变.. GAC文件将被替换?

  8. 此外,GAC dll如何删除。是否有任何删除标准?

我想问题有点混乱,但希望你们知道我在问什么。

PS:此主题相关net-assembly-dll-sharing-and-deploying

回答

4

1)要看你做什么样的变化来修正错误。如果您更改任何公共接口或对行为进行重大更改,我会碰撞程序集版本号。如果不是的话,你可以做微软只为该文件提供的版本。

2)汇编版本就是GAC关心的一切。所以,如果你想要两个相同名称的程序集并排居住,它们必须根据程序集版本而有所不同。

3)我可能会更改程序集版本号,并包含发布者策略以将旧版本的客户端重定向到新的版本。

4)与3相同,但不包括发布者策略,或者配置A绕过它。

5)& 6)不,它是并排安装的。

7)我不这么认为,但它可能取决于它们是否在文件版本上有所不同。我相信你可以尝试验证。

8)有可能被用来防止意外移除的参考文献。 MSI使用它,所以如果您使用MSI进行安装,它会跟踪对程序集的引用,并且在所有应用程序卸载之前不会将其删除。如果你手动操作(比如使用Gacutil/uf),你可以把事情搞砸。

+1

thx for answer。 我也发现此链接 http://blogs.msdn.com/junfeng/archive/2004/02/14/72666.aspx “当我们看到程序集已经存在于GAC中时,我们尝试比较文件版本GAC中的程序集(我们称之为“旧”程序集)以及程序集的文件版本即将安装(和“新”程序集)。如果“新”程序集的文件版本低于“旧”程序集,我们将拒绝安装“新”程序集,除非您要求融合强制安装(“gacutil -if”)。“ – Amitd 2009-12-18 05:35:25

+1

经过这个答案和一些研究..我得到了答案,thx你:) [a]并行安装在GAC中总是改变汇编版本。 [b]错误修复总是改变汇编文件版本。 [c]如果相同的程序集版本,旧版本的文件总是被更新的版本所取代。 [d]强制用旧文件版本(给定相同的程序集版本)替换新文件版本在gacutil中使用强制标志。 – Amitd 2009-12-20 06:57:41