Какой gacutil.exe я должен использовать? - PullRequest
10 голосов
/ 27 марта 2012

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

  1. c: \Программные файлы \ 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 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, так и для более ранних версий сборок.Итак, вопрос в том, зачем оставлять V2.0 gacutil.exe?Я думаю, что для целей развертывания в тамошних средах .NET4.0 недоступен.
  5. Использовать или не использовать GAC, вопрос не был.Поэтому я оставляю последний абзац без комментариев.

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

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

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

Ответы [ 3 ]

5 голосов
/ 27 марта 2012

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 вашего пользователя.

3 голосов
/ 18 апреля 2012

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

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

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

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

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

...