所以,在Win 2008 R2 Std x64上,我有6(6)个gacutil.exe全部不同(不包括VS文件夹中的),在:
问题是:
x64
版本在行为上有什么不同? v7.0A
版本其他v6.0A
? NETFX 4.0 Tools
版本,其余的是“标准”版本吗? 或者,如果有关于这个问题的一般性文章,我将不胜感激。
更新1.关于Hans Passant的回答 :
更新2。
所以,对我来说,似乎可以安全地使用数字3(然后.NET4.0不可用)或数字5,否则在Windows x86和x64上的所有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
版本。 否则,这并不重要。
问题的答案:
NETFX 4.0 Tools
版本。 不知道是否有可能有一个V7.0 SDK,并没有安装.NET 4.0。 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
然后我改变了每个版本的文件夹。