我应该使用什么gacutil.exe?

时间:2012-03-27 11:53:24

标签: .net windows .net-4.0 gac gacutil

因此,在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 Tools
  6. c:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0 Tools \ x64
  7. 问题是:

    1. x64版本的行为有什么不同吗?
    2. 我应该更喜欢其他v7.0A的{​​{1}}个版本吗?
    3. 我应该为.NET 4.0程序集使用v6.0A版本吗?其余部分使用“标准”版本吗?
    4. 或者,如果有关于这个主题的一般类型文章,我将不胜感激。

      更新1。关于Hans Passant's answer

      1. gacutil.exe 是“构建,部署和配置工具(.NET Framework)”的.NET Framework Tool 的一部分,因为现在过时了(!)shfusion.dll ;
      2. 确实v6.0A来自VS2008安装,可以忽略(1,2);
      3. 64位解释理论听起来也合理。我还假设最有可能是IA64 version of 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,不在问题中。所以我留下最后一段没有评论。
      6. 更新2。

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

        1. 没有
        2. 无所谓,但使用更新的版本似乎更合乎逻辑。
        3. 不,您可以随时使用NETFX 4.0 Tools版本(如果.NET4.0可用)进行所有GAC操作。

3 个答案:

答案 0 :(得分:5)

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。 .NET 4程序集的GAC存储在c:\ windows \ microsoft.net \ assembly中。对于早期版本,它存储在c:\ windows \ assembly中。您必须使用正确版本的gacutil.exe将程序集合并到正确的GAC中。对于面向.NET 4的程序集,必须使用Bin \ NETFX 4.0 Tools中的程序集。对于早期的,必须使用Bin中的那个。

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

答案 1 :(得分:3)

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

问题答案:

  1. 没有
  2. 除非没有安装.NET 4.0,否则无关紧要,在这种情况下,您应该使用NETFX 4.0 Tools版本。不确定是否可以安装v7.0 SDK并且没有安装.NET 4.0。
  3. 不,您可以(并且应该)使用NETFX 4.0 Tools版本进行所有GAC操作。

答案 2 :(得分:0)

这不是最好的答案,但我注意到了观察。根据您为相关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

然后我为每个版本更改了相应的文件夹。