2012-03-27 74 views
9

因此,在一个双赢2008 R2标准版x64,我有6(SIX)的Gacutil.exe所有不同的(不包括在VS文件夹的),在:我应该使用什么gacutil.exe?

  1. C:\ Program Files文件\微软的SDK \的Windows \ v6.0A \ BIN
  2. C:\ Program Files文件\微软的SDK \的Windows \ v6.0A \ BIN \ x64的
  3. C:\ Program Files文件(x86)的\微软的SDK \的Windows \ V7 .A \ Bin
  4. c:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Bin \ x64
  5. C:\ Program Files文件(x86)的\微软的SDK \的Windows \ v7.0A \ BIN \ NETFX 4.0工具
  6. C:\ Program Files文件(x86)的\微软的SDK \的Windows \ v7.0A \ BIN \ NETFX 4.0工具\ x64的

的问题是:

  1. 是否x64版本有任何行为上的差异?
  2. 我更喜欢v7.0A版本其他v6.0A
  3. 我应该在.NET 4.0程序集中使用NETFX 4.0 Tools版本,其余的版本是“标准”版本吗?

或者,如果有关于这个问题的一些普通类型的文章,我将不胜感激。

更新1关于Hans Passant's answer

  1. gacutil.exe是 “构建,部署和配置工具(.NET框架)” 为现在已经过时的.NET框架工具部分(!) 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,不在问题中。所以我留下最后一段没有评论。

更新2

所以,对我来说似乎是一个可以安全地使用在Windows x86和x64所有GAC操作,或者是3号(当时.NET4.0不可用)或其他5号。而问题的答案是:

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

真的想回答......“他们都没有...... nuget或bin部署FTW”! – 2012-03-27 11:55:35

+0

@DanielElliott很好;但是,这次我真的想清除这个问题。 – 2012-03-27 12:05:22

+0

也有兴趣自己回答...祝你好运! – 2012-03-27 12:14:47

回答

3

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

问题的答案:

  1. 其实并不重要,除非没有.NET 4.0安装,在这种情况下,你应该使用NETFX 4.0 Tools版本。不知道是否可以安装v7.0 SDK并且没有安装.NET 4.0。
  2. 不,您可以随时(也应该)为所有GAC操作使用NETFX 4.0 Tools版本。
3

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工具中的一个。而对于之前的版本,必须使用

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

+0

另外,没有管理权限的用户将无法安装需要程序集在GAC中的应用程序(如Oracle ODP.NET)。在ODP.NET的情况下,复制本地不起作用。 – 2012-03-28 02:29:53

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 

然后我为每个版本都适当地更改了文件夹。