Как извлечь сборку из GAC? - PullRequest
131 голосов
/ 03 апреля 2009

Есть пакет, с которым мне приходится иметь дело, который устанавливает сборки прямо в GAC (например, где-то глубоко в% windows% / assembly).

Как изгнать фактическую сборку (DLL) из GAC в обычную файловую систему?

Спасибо.

Ответы [ 15 ]

148 голосов
/ 03 апреля 2009

Я использовал совет этой статьи , чтобы получить сборку от GAC.

Получить DLL из GAC

DLL один раз развернут в GAC (обычно находится в c: \ windows \ assembly) не может быть просмотрено или используется как обычный файл DLL. Oни на VS нельзя напрямую ссылаться проект. Разработчики обычно держат копия исходного файла DLL и обратитесь к нему в проекте по адресу время разработки (проектирования), которое использует сборка из GAC во время выполнения проекта.

Во время выполнения (во время выполнения), если Считается, что собрание подписано и развертывается в GAC CLR автоматически забирает сборку из GAC вместо DLL, на которую ссылаются во время Время проектирования в ВС. В случае, если разработчик удалил оригинальную DLL или нет по какой-то причине, есть способ получить файл DLL от GAC. Выполните следующие шаги скопировать DLL из GAC

  1. Запустите regsvr32 / u C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ shfusion.dll

    • shfusion.dll - это DLL расширения проводника, которая дает посмотрите в папку GAC. Дерегистрация этот файл удалит сборку просмотрщик кэша и папка GAC быть видимым как любая нормальная папка в проводнике.
  2. Откройте «% windir% \ assembly \ GAC_MSIL».

  3. Перейдите в свою папку DLL вглубь, чтобы найти свою DLL.

  4. Скопируйте DLL куда-нибудь на жесткий диск и отошлите ее оттуда в свой проект

  5. Запустите "regsvr32% windir% \ Microsoft.NET \ Framework \ <. NET каталог версий> \ shfusion.dll "для заново зарегистрировать файл shfusion.dll и восстановить первоначальный отчетливый взгляд на ПКК.

107 голосов
/ 03 апреля 2009

Метод, описанный здесь, очень прост:

http://andreasglaser.net/post/2008/08/05/Extract-assembly-from-Global-Assembly-Cache-(GAC)-with-network-drive-mapping.aspx

Резюме от статьи:

  • Карта сетевого диска (Проводник -> Инструменты)
    • Сопоставить с \ servername \ folder (\\YourServer\C$\Windows\Assembly)
  • Нет необходимости делиться, если вы являетесь администратором
  • Найдите диск и извлеките сборку
80 голосов
/ 10 июня 2010

Откройте командную строку и введите:

cd  c:\windows\assembly\GAC_MSIL 

xcopy . C:\GacDump /s /y

Это должно дать дамп всего GAC

Наслаждайтесь!

22 голосов
/ 03 апреля 2009

Да.

Добавить ключ реестра DisableCacheViewer

Создайте новый ключ dword в HKLM \ Software \ Microsoft \ Fusion \ с именем DisableCacheViewer и установите для него значение [DWORD] 1. 1. 1005 *

Вернитесь в Проводник Windows в папку сборки, и это будет обычное представление файловой системы.

16 голосов
/ 03 апреля 2009

Я думаю, что самый простой способ - это сделать из командной строки, как упоминает Дэвид. Единственная хитрость в том, что .dll не просто находится в C: \ Windows \ Assembly. Вы должны перейти к C: \ Windows \ Assembly \ GAC \ [ASSEMBLY_NAME] \ [VERSION_NUMBER] _ [PUBLIC KEY]. Затем вы можете сделать копию, используя:

скопируйте [ASSEMBLY_NAME] .dll c: \ (или в любое другое место)

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

13 голосов
/ 03 апреля 2009

Простой способ, который я нашел, - это открыть командную строку и просмотреть папку, о которой вы упоминаете, пока не найдете нужную библиотеку DLL. Затем вы можете воспользоваться командой copy, чтобы получить ее. Проводник Windows имеет «полезный» специальный вид этой папки.

7 голосов
/ 08 июля 2017

Открыть RUN , затем набрать %windir%\assembly\GAC_MSIL, это откроет ваши dll в представлении папок, затем вы сможете перейти к названной папке dll и открыть ее, вы найдете файл dll и легко скопируете его

4 голосов
/ 22 апреля 2013

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

Get-GacAssembly SomeCompany* | Get-GacAssemblyFile | Copy-Item -Dest C:\Temp\SomeCompany
3 голосов
/ 11 ноября 2015

Думаю, я нашел способ заглянуть внутрь GAC, не изменяя реестр и не используя командную строку, powershell или любые другие программы:

Создать новый ярлык (в любом месте). Затем измените ярлык, чтобы цель была:

%windir%\assembly\GAC_MSIL\System

Открытие этого ярлыка приведет вас к системной папке внутри GAC (которая должна быть у каждого) и имеет замечательный побочный эффект: вы можете переключиться на более высокий каталог, а затем перейти в любую другую папку, которую хотите (и увидеть файлы dll и т. д.)

Я проверял это на Windows 7 и Windows Server 2012.

Примечание. Это не позволит вам использовать эту цель при создании ярлыка, но позволит вам ее редактировать.

Наслаждайтесь!

3 голосов
/ 28 января 2010

В этом MSDN блоге посте описаны три отдельных способа извлечения DLL из GAC. Полезное краткое изложение приведенных методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...