我应该使用什么gacutil.exe?

所以,在Win 2008 R2 Std x64上,我有6(6)个gacutil.exe全部不同(不包括VS文件夹中的),在:

  1. c:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ Bin
  2. c:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ Bin \ x64
  3. c:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Bin
  4. c:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Bin \ x64
  5. c:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0工具
  6. c:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0 Tools \ x64

问题是:

  1. x64版本在行为上有什么不同?
  2. 我应该更喜欢v7.0A版本其他v6.0A
  3. 我应该使用.NET 4.0组件的NETFX 4.0 Tools版本,其余的是“标准”版本吗?

或者,如果有关于这个问题的一般性文章,我将不胜感激。

更新1.关于Hans Passant的回答 :

  1. gacutil.exe 是一个 “构build,部署和configuration工具(.NET Framework)” 的.NET Framework工具的一部分,就像现在已经过时的(!) shfusion.dll一样 ;
  2. 确实v6.0A都是从VS2008安装的,可以忽略(1,2);
  3. 64位的解释理论听起来也是合理的。 我也想到最有可能的是一个IA64版本的gacutil.exe ,所以它就像一个“每个平台的工具副本”,它只是发生了,所以x86版本因为WoW64在任何地方运行良好。 从列表中减去2 gacutil版本(4,6);
  4. 关于哪个版本使用的部分似乎是错误的。 V4.0 gacutil.exe根据目标CLR检测并放置程序集,并且对于.NET 4.0和更早版本的程序集都可以正常工作。 所以问题是,为什么要离开V2.0 gacutil.exe? 我的猜测是为了部署在那里的环境.NET4.0不可用。
  5. 使用或不使用GAC,不在问题中。 所以我留下最后一段没有评论。

更新2。

所以,对我来说,似乎可以安全地使用数字3(然后.NET4.0不可用)或数字5,否则在Windows x86和x64上的所有GAC操作。 问题的答案是:

  1. 没有。
  2. 没关系,但使用更新的版本似乎更合乎逻辑。
  3. 不,您可以始终为所有GAC操作使用NETFX 4.0 Tools版本(如果.NET4.0可用)。

Gacutil.exe是Windows SDK工具,而不是.NET框架工具。 你的机器上有两个版本的SDK。 你从VS2008安装得到6.0A,从VS2010安装得到7.0A。 你也有一个64位的操作系统,所以你也有64位的工具。 这对gacutil.exe无关紧要,不知道为什么他们单独包含它。 可能要保持Visual Studio命令提示符正常工作,请注意您有它的单独的32位和64位版本。 这对于C ++项目来说很重要。 VS2010允许针对CLR版本4和CLR版本2,因此共有6个版本。

重要的是你的机器上有两个GAC。 GAC for .NET 4程序集存储在c:\ windows \ microsoft.net \ assembly中。 对于早期版本,它存储在c:\ windows \ assembly中。 您必须使用正确版本的gacutil.exe将程序集导入适当的GAC。 对于以.NET 4为目标的程序集, 必须使用Bin \ NETFX 4.0工具中的一个。 而对于早期的,你必须使用Bin中的那个。

完全不使用它是最好的,程序集应该在开发机器上设置Copy Local属性。 GAC是一个部署细节,当您的GAC拥有您的用户的GAC没有的程序集时,您将遇到麻烦。

简短版本:如果您安装了.NET 4.0,请使用NETFX 4.0 Tools版本。 否则,这并不重要。

问题的答案:

  1. 没有。
  2. 除非没有安装.NET 4.0,否则无关紧要,在这种情况下,您应该使用NETFX 4.0 Tools版本。 不知道是否有可能有一个V7.0 SDK,并没有安装.NET 4.0。
  3. 不,您可以随时(也应该)为所有GAC操作使用NETFX 4.0 Tools版本。

这不是最好的答案,但我注意到一个观察。 使用最新版本的文件夹,基于您正在为相关Visual Studio安装开发的应用程序所使用的任何内容。

 C:\Program Files (x86)\Microsoft SDKs\Windows\{SDK version}\bin\NETFX 4.5.1 Tools\gacutil.exe 

比较我的Visual Studio安装的控制面板>程序和功能>“安装”日期时,在这里看到许多不同的文件夹。 我猜这两个安装过程中更新了多个文件夹。

“gacutil.exe”所在的文件夹和修改日期:

 C:\Program Files (x86)\Microsoft SDKs\Windows\ C:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\ - 3/20/2014 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\ - 3/20/2014 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\ - 5/15/2015 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0\ - 3/20/2014 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\ - 5/15/2015 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1\ - 5/15/2015 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\ - 5/15/2015 

带有“安装日期”的Windows Visual Studio安装:

 Visual Studio 2012 - 3/20/2014 Visual Studio 2013 - 5/15/2015 

为了比较GAC中的内容,我运行了这个命令并区分了文件进行比较。

 cd C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\ gacutil /l > c:\v8.1A.gac.txt 

然后我改变了每个版本的文件夹。