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

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

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

ОБНОВИТЬ

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

До свидания.

12.10.2009 21:50:52
Воу, воу воу. Подожди минуту! Это не совсем папка. Я думаю, что это лишь малая часть того, чего вы пытаетесь достичь; См .: stackoverflow.com/questions/205188/…
Robert P 12.10.2009 22:28:26
Нет такой вещи как «Каталог GAC». GAC - это просто список собраний.
overstood 12.10.2009 23:33:32
Это виртуальная файловая система - кажется слишком педантичной, чтобы говорить, что это не каталог. Как вы можете видеть, делая это dir %windir%\assembly, он выглядит как набор каталогов для остального мира!
Cheeso 13.10.2009 00:26:58
Какой именно анализ вы хотите провести на сборках GAC и почему? Ответы важны, потому что могут быть (намного) лучшие способы достижения вашей конечной цели.
Ðаn 13.10.2009 01:00:14
5 ОТВЕТОВ
РЕШЕНИЕ

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

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

5
13.10.2009 00:21:50
Похоже, что это лучший поддерживаемый метод для «перечисления и анализа» материала в GAC.
Ðаn 13.10.2009 01:02:19
Поверьте мне, вы не хотите полагаться на то, где GAC «появляется» в файловой системе. Это может измениться.
Joe Kuemerle 13.10.2009 16:23:37
Точно. Теперь, когда бета-версия 2 .NET 4.0 стала общедоступной, мы видим, что MS переместила расположение GAC в каталоги% SYSTEM% \ Microsoft.NET \ assembly \ GAC *, поэтому мы знаем, что для его поиска лучше использовать Fusion.
Joe Kuemerle 19.10.2009 16:24:09

Это не всегда %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
1
12.10.2009 22:19:16
Нет, так будет не всегда %windir%\Assembly. Сейчас это происходит именно так, но его текущее местоположение и его структура не гарантируют, что он останется прежним, и при этом не помещает туда файлы разумный API для установки или чтения информации из GAC.
Robert P 12.10.2009 22:32:58
@ Роберт, очень маловероятно, что Microsoft изменит его, так как это будет представлять большой риск для обратной совместимости. (Не сказать, что все в порядке, чтобы попытаться сделать это)
Rex M 12.10.2009 22:45:48

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

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

1
12.10.2009 21:57:18
Вы собираетесь держать это в секрете?
Cheeso 12.10.2009 22:16:10
Возможно, потому что, если вы ищете папку GAC, вы делаете что-то не так. «Местоположение» GAC НЕ является фиксированным, и нет API для его поиска.
Robert P 12.10.2009 22:29:53
Я полностью согласен с вами, что может быть что-то (очень) не так, если ему нужна эта папка. С другой стороны, может быть, он просто хочет разработать информационный инструмент. Так почему не. На самом деле это даже имело бы смысл, поскольку папка не открывалась в Проводнике по умолчанию. И пример кода показывает, что не сложно найти путь.
Foxfire 12.10.2009 22:35:53
Обратите внимание, что для .NET 4.0 Beta 2 расположение сборок GAC больше не по умолчанию равно% windir $ \ assembly.
Joe Kuemerle 19.10.2009 16:25:05

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

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

0
12.10.2009 23:32:48
gacutil для разработчиков; Производственные приложения должны использовать MSI и друзья.
Ðаn 12.10.2009 23:35:32

Существуют абсолютно веские причины для доступа к 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
27.03.2012 10:08:15