Как я могу получить местоположение GAC, используя C #? - PullRequest
3 голосов
/ 13 октября 2009

Как я могу получить местоположение каталога GAC , используя C #?

Есть запись в реестре Windows?

UPDATE

Мне нужно местоположение, потому что я хочу перечислять и анализировать сборки, расположенные в GAC.

Bye.

Ответы [ 5 ]

5 голосов
/ 13 октября 2009

Если вы хотите перечислить материал в GAC (например, написать инструмент системного администрирования), ваш лучший вариант - использовать fusion.dll, хотя для этого требуется некоторый код взаимодействия на вашей стороне.

Ссылка на документацию Microsoft для Fusion.DLL

1 голос
/ 27 марта 2012

Существуют абсолютно веские причины для доступа к GAC вручную, как к папке. Конечно, нужно знать о риске манипулирования вещами там. Но доступ только для чтения вполне приемлем, я бы сказал.

Помимо упомянутого% windir% \ assembly может случиться, что Нир Софер уже сделал эту работу за вас. Он написал GACView .

И, эй, в нем даже есть функция отключения специального представления в Проводнике: Параметры / Отключить Просмотр сборок в Проводнике. Папка будет отображаться как обычная папка. Хотя это хорошо работает в Windows XP, в Windows 7 - 64-битной - нет, потому что это устанавливается в 32-битной версии реестра. Чтобы отключить средство просмотра сборок в Windows 7 64-разрядной версии, запустите Regedit (64-разрядную версию), перейдите на

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion

и добавьте новый DWORD с именем DisableCacheViewer со значением 1.

Чтобы быть независимым от каталога (который может измениться), вы можете перечислять сборки с помощью ключа реестра Fusion:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\GACChangeNotification\Default

Полагаю, именно так GACView работает внутренне. Но он по-прежнему не будет перечислять сборки .NET 4 в% windir% \ Microsoft.NET \ assembly.

Инструментом, поддерживающим .NET 4, является GACBrowser , но он отображает меньше информации.

1 голос
/ 13 октября 2009

Он находится в папке% windir% \ Assembly.

Дэн получил ответ первым, хотя пример кода.

1 голос
/ 13 октября 2009

Не всегда ли %windir%\assembly?

редактировать:

c:\Windows>dir \windows\assembly
 Volume in drive C has no label.
 Volume Serial Number is C8BC-2EBD

 Directory of c:\windows\assembly

08/14/2009  03:06 AM    <DIR>          GAC
07/28/2009  03:07 AM    <DIR>          GAC_32
09/08/2009  10:57 PM    <DIR>          GAC_MSIL
08/15/2009  07:35 PM    <DIR>          NativeImages_v2.0.50727_32
09/08/2009  10:57 PM    <DIR>          temp
09/08/2009  09:47 PM    <DIR>          tmp
               0 File(s)              0 bytes
               6 Dir(s)   4,560,822,272 bytes free
0 голосов
/ 13 октября 2009

Пусть среда выполнения управляет своими сборками и верит, что они будут там. Если вам нужно что-то установить, используйте gacutil. Если вам нужно что-то удалить, используйте gacutil. Если вам нужен доступ к сборке, добавьте ссылку на нее в свой проект. Если вам нужно взаимодействовать с GAC на чужой машине, делайте то, что говорит @Dan, и используйте MSI и друзей.

В противном случае НЕ ПРИКАСАЙТЕСЬ к GAC

...