2012-03-27 102 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 

然後我爲每個版本都適當地更改了文件夾。