Где физически хранятся сборки, установленные в GAC? - PullRequest
6 голосов
/ 02 мая 2009

Я хочу экспортировать сборки, встроенные в мой проект. Но где они физически хранятся?

Ответы [ 4 ]

11 голосов
/ 02 мая 2009

Я действительно нашел этот пост после того, как написал свой вопрос. Это действительно хорошо объяснили:

Вы сможете увидеть их, если перейдете к

c:\windows\assembly

с проводником, где вы увидите красиво отформатированный список сборок.
Расширение оболочки, отвечающее за это представление, отображает не только сборки в GAC, но и собственные версии сборок, предварительно скомпилированных с помощью ngen.exe.
Но файлы на самом деле здесь не хранятся - расширение оболочки просто маскирует их истинное местоположение. Вы можете увидеть, где файлы действительно хранятся, перейдя в тот же каталог через командную строку.
В этом месте находятся несколько подкаталогов, в том числе один с именем GAC. Здесь, под несколькими слоями хеш-кодов и имен сборок, находятся физические сборки, а также старомодный файл .INI, который, помимо прочего, содержит строгое имя. На этой неизведанной территории стоит изучить, чтобы понять, что происходит под прикрытием, хотя остерегайтесь вносить изменения, поскольку GAC должен быть непрозрачным.

3 голосов
/ 02 мая 2009

Они хранятся в% systemroot% в папке с именем сборка

Переменная% SystemRoot% - это специальная общесистемная переменная среды, встречающаяся в Microsoft Windows NT и ее производных. Его значением является местоположение системной папки, включая диск и путь.

Диск такой же, как% SystemDrive%, и путь по умолчанию для чистой установки зависит от версии операционной системы. По умолчанию при чистой установке:

* Windows NT 5.1 (Windows XP) and newer versions use \WINDOWS
* Windows NT 5.0 (Windows 2000), Windows NT 4.0 and Windows NT 3.1 use \WINNT
* Windows NT 3.5x uses \WINNT35

(из википедии)

2 голосов
/ 02 мая 2009

Физическим местоположением GAC является каталог сборки под% WINDIR%, например,

c:\windows\assembly

Вы можете копировать сборки в gac с помощью Explorer или программы gacutil.

1 голос
/ 25 августа 2009

нет, физически сборки хранятся не в "C: \ Windows \ assembly". там хранятся только ссылки на сборки. например, сборка "System.Windows.Forms.dll" (а также большая часть сборок .NET Framework) физически хранится в "C: \ Windows \ winsxs" во многих редакциях, оптимизирован для многих платформ (просто перейдите к «C: \ Windows \ winsxs» в проводнике и введите «System.Windows.Forms.dll» в поле поиска). например, вы можете создать сборку со строгим именем, зарегистрировать ее в GAC, но это место, где вы размещаете файл сборки. (например, «C: \ Users \% username% \ Documents \ Visual Studio 2008 \ Projects \ YourAssemblyProjectName \ YourAssemblyProjectName \ bin \ Debug» - каталог проектов VS по умолчанию). и более того, в GAC хранятся только ссылки на сборки, поэтому, если вы перестраиваете свою сборку, зарегистрированную в GAC, сборки, которые используют вашу сборку, ссылаясь на нее из GAC, также будут использовать восстановленную версию вашей сборки. 1001 *

...