Dot-Net

我應該使用什麼 gacutil.exe?

  • April 25, 2021

因此,在 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 位解釋理論聽起來也很合理。我還假設gacutil.exe 很可能有一個 IA64 版本,所以它就像一個“每個平台的工具副本”,只是因為 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 可用)。

短版:如果您安裝了 .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 操作使用版本。

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 沒有的程序集時,您會遇到麻煩。

引用自:https://stackoverflow.com/questions/9889053