Какой gacutil.exe мне следует использовать?

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

  1. c: \ Program Files \ Microsoft SDK \ Windows \ v6.0A \ Bin
  2. c: \ Program Files \ Microsoft SDK \ 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 SDK \ Windows \ v7.0A \ Bin \ NETFX 4.0 Tools
  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, так что это похоже на копию инструмента для каждой платформы, просто так получилось, что версия x86 отлично работает везде из-за WoW64. Минус 2 версии gacutil из списка (4, 6);
  4. Часть о том, какую версию использовать, кажется неправильной. V4.0 gacutil.exe обнаруживает и размещает сборку в соответствии со своей целевой средой CLR и отлично работает как для сборок .NET 4.0, так и для сборок более ранних версий. Возникает вопрос, а зачем оставлять gacutil.exe из версии 2.0? Я предполагаю, что для развертывания в средах, где .NET4.0 недоступен.
  5. Использовать или не использовать GAC не было и речи. Поэтому я оставляю последний абзац без комментариев.

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

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

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

person Petr Abdulin    schedule 27.03.2012    source источник
comment
На самом деле хочу ответить ... Ни один из них ... nuget или bin deploy FTW !!   -  person Daniel Elliott    schedule 27.03.2012
comment
@DanielElliott хороший ;-) Но все же на этот раз я действительно хочу прояснить этот вопрос.   -  person Petr Abdulin    schedule 27.03.2012
comment
Я тоже заинтересован в ответе ... удачи!   -  person Daniel Elliott    schedule 27.03.2012


Ответы (3)


Gacutil.exe - это инструмент Windows SDK, а не инструмент .NET framework. У вас есть две версии SDK на вашем компьютере. У вас 6.0A от установки VS2008, 7.0A от установки 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 Tools. А для более ранних вы должны использовать тот, который находится в Bin.

Использование его совсем не лучший вариант, сборки должны иметь свойство Copy Local, установленное на машине разработчика. GAC - это деталь развертывания, у вас возникнут проблемы, если в вашем GAC есть сборка, которой нет в GAC вашего пользователя.

person Hans Passant    schedule 27.03.2012
comment
Кроме того, пользователи без прав администратора не смогут установить приложение, для которого требуется, чтобы сборки находились в GAC (например, Oracle ODP.NET). В случае ODP.NET локальное копирование не работает. - person Jim Schubert; 28.03.2012

Краткая версия: если у вас установлена ​​.NET 4.0, используйте версию NETFX 4.0 Tools. В противном случае это не имеет значения.

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

  1. No.
  2. На самом деле это не имеет значения, если не установлен .NET 4.0, и в этом случае вы должны использовать NETFX 4.0 Tools версию. Не уверен, что можно иметь SDK v7.0 и не устанавливать .NET 4.0.
  3. Нет, вы всегда можете (и должны) использовать NETFX 4.0 Tools версию для всех операций GAC.
person Petr Abdulin    schedule 18.04.2012

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

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

person MacGyver    schedule 23.07.2015