11

因此,在 Win 2008 R2 Std x64 上,我有 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. 我应该使用NETFX 4.0 Tools.NET 4.0 程序集的版本,而其余的使用“标准”版本吗?

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

更新1。关于汉斯帕桑特的回答

  1. gacutil.exe 是“构建、部署和配置工具 (.NET Framework)”的 .NET Framework 工具的一部分,因为现在已经过时 (!) shfusion.dll
  2. 确实 v6.0A 是从 VS2008 安装的,可以忽略(1、2);
  3. 64 位解释理论听起来也很合理。我还认为很可能有一个IA64 版本的 gacutil.exe,所以它就像“每个平台的工具副本”,只是因为 WoW64,x86 版本在任何地方都可以正常运行。列表中减去 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. 没关系,但使用较新的版本似乎更合乎逻辑。
  3. 不,您始终NETFX 4.0 Tools可以对所有 GAC 操作使用版本(如果 .NET4.0 可用)。
4

3 回答 3

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 工具中的程序集。对于较早的,您必须使用 Bin 中的那个。

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

于 2012-03-27T12:47:47.330 回答
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 操作使用版本。
于 2012-04-18T04:16:10.197 回答
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

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

于 2015-07-23T17:46:05.897 回答