Как извлечь сборку из 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
запустить regsvr32 /u C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\shfusion.dll
- shfusion.dll-это DLL расширения проводника, который дает посмотрите на папку GAC. Отмена регистрации этот файл удалит сборку просмотра кэша и папки ПКК затем отображается как любая обычная папка в проводнике.
открыть "%windir%\assembly\GAC_MSIL".
обзор к вашей папке DLL в глубину, чтобы найти вашу DLL.
скопируйте DLL где-нибудь на жестком диске и обратитесь к нему оттуда в вашем проект
выполнить "regsvr32 %windir%\Microsoft.NET\Framework\ \shfusion.dll " to перерегистрация свфузии.DLL файл и восстановить первоначальный отчетливый вид глобальный кэш сборок.
метод, описанный здесь, очень прост:
резюме из статьи:
- карта сетевого диска (проводник - > инструменты)
- карта \имя_сервера\папка (
\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".
- включить параметр "показать скрытые / системные файлы" в Total Commander
- перейдите к "c:\windows\assembly"
- скопировать
из сценария 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. Я скопировал файл. Я закрыл окно. Сделанный.