Что gacutil.exe должен ли я использовать?


Итак, на Win 2008 R2 Std x64, у меня есть 6 (шесть) gacutil.exe все разные (не считая тех, что в папках VS), в:

  1. c:Program файлыMicrosoft SDKsWindowsv6. 0ABin
  2. c:Program файлыMicrosoft пакет SDK папкеWindowsV6 двигателем.0АБинх64
  3. c:Program файлы (x86)Microsoft SDKsWindowsv7. 0ABin
  4. c:Program файлы (x86)Microsoft SDKsWindowsv7. 0ABinx64
  5. c:Program файлы (x86)Microsoft SDKsWindowsv7. 0ABinNETFX 4.0 Tools
  6. файлы c:Program (для x86)Microsoft пакет SDK папкеWindowsВ7.0АБинNETFX 4.0 инструментых64

Вопросы таковы:

  1. есть ли у версий x64 какие-либо различия в поведении?
  2. должен ли я предпочесть v7.0A версии другим v6.0A?
  3. должен ли я использовать версии NETFX 4.0 Tools для сборок .NET 4.0 и "стандартную" версию для остальных?

Или, если есть какая-то статья общего типа по этому вопросу, я буду благодарный.

Обновление 1. относительно ответа Ганса Пассанта :

  1. gacutil.ехе это .Основы инструмент. net часть "построение, развертывание и настройка инструментов (.Net фреймворка)" как сейчас устарело (!) шфузия.dll была;
  2. действительно v6. 0A из VS2008 install, и его можно игнорировать (1, 2);
  3. 64-битная теория объяснения также звучит разумно. Я также предполагаю, что существует, скорее всего, версия IA64 gacutil.exe , так что это как "копия инструмента для каждой платформы", это просто произошло так, что версия x86 работает нормально везде из-за WoW64. Минус 2 версии gacutil из списка (4, 6); Часть о том, какую версию использовать, кажется неправильной. В4.0 gacutil.exe обнаруживает и размещает сборку в соответствии с ее целевой средой CLR и прекрасно работает как для сборок .NET 4.0, так и для более ранних версий. Так что вопрос в том, зачем оставлять V2. 0 gacutil.отлично? Мое предположение было бы с целью развертывания на есть сред .Серии net4.0 недоступна.
  4. использовать или не использовать GAC, не было в вопросе. Поэтому я оставляю последний абзац без комментариев.

Обновление 2.

Таким образом, мне кажется, что можно безопасно использовать либо число 3 (тогда .NET4.0 недоступен), либо число 5 в противном случае для всех операций GAC на Windows x86 и x64. И ответы на эти вопросы таковы:

  1. нет.
  2. не имеет значения, но использование более новых версий кажется более эффективным. логический.
  3. Нет, вы всегда можете использовать версию NETFX 4.0 Tools (Если.NET4. 0 доступен) для всех операций GAC.
3 9

3 ответа:

Gacutil.exe-это средство Windows SDK, а не .NET framework. У вас есть две версии SDK на вашем компьютере. Вы получили 6.0 A от установки VS2008, 7.0 A от установки VS2010. У вас также есть 64-разрядная операционная система, поэтому вы также получили 64-разрядные инструменты. Который не имеет значения для gacutil.exe, не уверен, почему они включают его отдельно. Вероятно, чтобы сохранить работу командной строки Visual Studio, обратите внимание, что у вас есть отдельные 32-разрядные и 64-разрядные версии. Что очень важно для C++ проекты. VS2010 позволяет таргетировать как CLR версии 4, так и CLR версии 2, так что всего 6 версий.

Большое значение имеет то, что у вас есть два GAC на вашем компьютере. GAC для сборок .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 версию. В противном случае это не имеет значения.

Ответы на вопросы:

  1. нет.
  2. на самом деле не имеет значения, если не установлен .NET 4.0, в этом случае вы должны использовать версию NETFX 4.0 Tools. Не уверен, если это возможно, чтобы иметь В7.0 SDK и нет .Net версии 4.0 установлен.
  3. Нет, вы всегда можете (и должны) использовать версию NETFX 4.0 Tools для всех операций GAC.

Это не самый лучший ответ, но я замечаю одно наблюдение. Используйте папку последней версии, основанную на том, что вы используете для приложения, разрабатываемого для соответствующей установки 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

Затем я изменил папку соответствующим образом для каждой версии.