32-битный GAC против 64-битного

Некоторое время я искал, пытаясь понять это лучше, но не нашел прямых ответов на этот вопрос.

У меня есть компонент, который мне нужно добавить в GAC. Я использую 64-разрядную версию Windows 7, и, пытаясь устранить проблему (SSIS 2005 не распознает DLL), я пытаюсь убедиться, что у меня есть библиотека DLL (.NET 4.0), зарегистрированная в соответствующем GAC. .

Итак, вот мои вопросы:

  1. Где в Windows 7 находятся физические местоположения как для 64-битных, так и для 32-битных GAC? Я знаю C: \ Windows \ assembly, но не уверен, какой это, а где другой.

  2. Какую версию gacutil использовать для добавления сборки в 64-битный GAC? 32-битный GAC? Я знаю C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC, и я предполагаю, что это для 32-битной версии, но не уверен, где находится 64-битный gacutil.

  3. Что определяет, в каком GAC приложение ищет сборку? Я предполагаю, что это определяется тем, является ли приложение 64-битным или 32-битным, но мне интересно, есть ли что-то еще, чем это.

Заранее спасибо.

Обновление:

Покопавшись в следующем ответе ShaneBlake, я вспомнил, что GAC .NET 2.0 и .NET 4.0 находятся в разных местах. Так:

.NET 2.0 GAC:
c:\windows\assembly (32- и 64-разрядные?)

.NET 4.0 GAC
c:\windows\Microsoft.NET\assembly\GAC_32 (только 32-разрядная версия)
c:\windows\Microsoft.NET\assembly\GAC_64 (только 64-разрядная версия)
c:\windows\Microsoft.NET\assembly\GAC_MSIL (32-разрядная и 64-разрядная?)


person Jerad Rose    schedule 28.06.2011    source источник
comment
Обратите внимание, что вы не можете использовать gacutil на клиентских машинах, если вы распространяете свое приложение. Проекты установщика / развертывания VS позволят вам установить сборки в правильное место.   -  person 3Dave    schedule 28.06.2011


Ответы (2)


Gacutil.exe должен установить .dll в нужное место в зависимости от того, как он был скомпилирован. Вы должны найти файл здесь: %ProgramFiles%\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\

В .NET 4 есть собственная папка сборки (c:\windows\Microsoft.NET\assembly), в которой есть каталоги \GAC_32 и \GAC_64 ... Здесь вы найдете свои файлы после их установки.

Надеюсь, это поможет...

person ShaneBlake    schedule 28.06.2011
comment
Доступен ли gacutil на клиентских машинах? Кажется, я помню, что он доступен только в том случае, если у вас установлен SDK. - person 3Dave; 28.06.2011
comment
@ Дэвид: Да. Он считается инструментом разработчика, поэтому у вас должен быть установлен SDK. - person ShaneBlake; 28.06.2011
comment
@ShaneBlake так думал. Я использовал проекты развертывания, чтобы собрать сборки в нужном месте, хотя GAC не входит в мой список любимых мест. - person 3Dave; 28.06.2011
comment
@ Дэвид Я согласен. В наших веб-приложениях я предпочитаю просто помещать их в \AppLocalResources, чтобы они были развернуты в \bin, и я всегда знаю, какую версию я использую ... - person ShaneBlake; 28.06.2011
comment
Спасибо вам обоим. Я обычно избегаю иметь дело с GAC, но SSIS требует, чтобы в GAC были установлены настраиваемые компоненты. - person Jerad Rose; 28.06.2011
comment
@ShaneBlake - Я изучил это, и у C:\Windows\Microsoft.NET\assembly есть три папки: GAC_32, GAC_64 и GAC_MSIL. Похоже, что у GAC_32 и GAC_64 всего несколько сборок. GAC_MSIL выглядит более отражающим фактический GAC, поскольку у него есть еще несколько (400 против 20 и 30), и в нем есть тот, который я добавил. Однако я все еще не уверен, считается ли GAC_MSIL 32-битным или 64-битным. - person Jerad Rose; 28.06.2011
comment
@Jerad Насколько я понимаю, GAC_MSIL содержит .dll, которые могут работать под 32 или 64. - person ShaneBlake; 28.06.2011
comment
Я считаю, что эти сборки GAC_MSIL должны быть скомпилированы для любого процессора, чтобы они могли работать как x64, так и x86. - person Sudhanshu Mishra; 08.10.2013
comment
В моем случае это было под C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64, а %ProgramFiles% перешло к C:\Program Files. - person Panzercrisis; 26.09.2016
comment
@ 3Dave Похоже, что это возможно, можно просто скопировать / вставить gacutil.exe (и его файл dll / config) в клиентскую систему, я могу попробовать это для быстрого теста. - person jrh; 09.10.2018
comment
@jrh Ну, я с этим не связывался уже 7 лет. НО, да, у gacutil не так много внешних зависимостей. Удачи! - person 3Dave; 10.10.2018
comment
@ 3Dave только что вернулся, чтобы сообщить, да, это определенно работает, чтобы скопировать / вставить как x86, так и x64 версии gacutil на тестовый ПК. - person jrh; 11.10.2018

Для Windows 10:

C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v7.0A \ Bin

person GorvGoyl    schedule 27.06.2017
comment
Одно время меня интересовало, есть ли причина не использовать самую последнюю версию SDK, которая у вас есть? Как ни странно, у меня v7.0A в Windows 10 и v10.0A в Windows 7; имеет ли вообще какое-либо влияние версия SDK? Может быть, обратная совместимость? Дополнительные возможности? - person jrh; 10.10.2018
comment
@jrh, пока мы возродим зомби-треды: да, обратная совместимость - главная причина не использовать последнюю версию SDK. Если вам нужно выполнить развертывание на Win7, использование SDK для RS5 не принесет вам друзей. - person 3Dave; 10.10.2018