Как извлечь сборку из GAC?

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

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

спасибо.

15 ответов


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

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

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

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

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

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

  3. обзор к вашей папке DLL в глубину, чтобы найти вашу DLL.

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

  5. выполнить "regsvr32 %windir%\Microsoft.NET\Framework\ \shfusion.dll " to перерегистрация свфузии.DLL файл и восстановить первоначальный отчетливый вид глобальный кэш сборок.


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

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

резюме из статьи:

  • карта сетевого диска (проводник - > инструменты)
    • карта \имя_сервера\папка (\YourServer\C$\Windows\Assembly)
  • нет необходимости делиться, если вы являетесь администратором
  • обзор к диску и извлеките свою сборку

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

cd  c:\windows\assembly\GAC_MSIL 

xcopy . C:\GacDump /s /y

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

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


да.

Добавить Раздел Реестра DisableCacheViewer

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

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


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

копировать [ИМЯ_СБОРКИ].dll c:\ (или в любом другом месте)

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


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


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


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

Get-GacAssembly SomeCompany* | Get-GacAssemblyFile | Copy-Item -Dest C:\Temp\SomeCompany

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


вместо этого используйте файловый браузер "Total Commander".

  1. включить параметр "показать скрытые / системные файлы" в Total Commander
  2. перейдите к "c:\windows\assembly"
  3. скопировать

из сценария Powershell вы можете попробовать это. У меня была только одна версия сборки в GAC, поэтому это сработало просто отлично.

cd "c:\Windows\Microsoft.NET\assembly\GAC_MSIL\"
Get-ChildItem assemblypath -Recurse -Include *.dll |  Copy-Item -Destination "c:\folder to copy to"

где путь сборки может использовать подстановочные знаки.


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

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

%windir%\assembly\GAC_MSIL\System

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

я протестировал это в windows 7 и windows server 2012.

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

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


просто перейдите к C:\Windows найти папку [сборка] щелкните правой кнопкой мыши и выберите Добавить в архив

подождите немного

vola у вас есть архивный файл, содержащий все сборки в вашем GAC


еще одно направление--просто распакуйте файл MSI и получите лакомства таким образом. Избавит вас от возможного удаления . . .


копирование из командной строки ненужно. Я набрал имя DLL из окна поиска "пуск". Я выбрал See More Results. Один в GAC был возвращен в окне поиска. Я щелкнул правой кнопкой мыши и сказал "открыть файл". Он открылся в обычном проводнике Windows. Я скопировал файл. Я закрыл окно. Сделанный.