Есть пакет, с которым мне приходится иметь дело, который устанавливает сборки прямо в GAC (например, где-то глубоко в% windows% / assembly).
Как изгнать фактическую сборку (DLL) из GAC в обычную файловую систему?
Спасибо.
Есть пакет, с которым мне приходится иметь дело, который устанавливает сборки прямо в GAC (например, где-то глубоко в% windows% / assembly).
Как изгнать фактическую сборку (DLL) из GAC в обычную файловую систему?
Спасибо.
Ответы:
Я использовал совет из этой статьи, чтобы получить сборку от 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. Отмена регистрации этого файла приведет к удалению средства просмотра кэша сборок, и папка GAC будет видна как любая обычная папка в проводнике.
Откройте «% windir% \ assembly \ GAC_MSIL».
Перейдите в свою папку DLL вглубь, чтобы найти свою DLL.
Скопируйте DLL куда-нибудь на жесткий диск и отошлите ее оттуда в свой проект.
Запустите "regsvr32% windir% \ Microsoft.NET \ Framework \ <.NET version version> \ shfusion.dll", чтобы заново зарегистрировать файл shfusion.dll и восстановить исходное отдельное представление GAC.
shfusion.dll
, не поддерживает DllInstall()
точку входа, вызываемую regsvr32
при передаче /i
опции. Отказ от этой опции позволяет успешно перерегистрировать компонент.
Метод, описанный здесь, очень прост:
Резюме из статьи:
\\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] _ [PUBLIC KEY]. Затем вы можете сделать копию, используя:
скопируйте [ASSEMBLY_NAME] .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 описывает три отдельных способа извлечения DLL из GAC. Полезное краткое изложение методов, приведенных до сих пор.
Думаю, я нашел способ заглянуть внутрь GAC, не изменяя реестр и не используя командную строку, powershell или любые другие программы:
Создайте новый ярлык (в любом месте). Затем измените ярлык, чтобы цель была:
%windir%\assembly\GAC_MSIL\System
Открытие этого ярлыка приводит вас к системной папке внутри GAC (что должно быть у каждого) и имеет замечательный побочный эффект: вы можете переключиться на более высокий каталог, а затем перейти в любую другую папку, которую вы хотите (и увидеть файлы dll и т. Д.)
Я проверил это на Windows 7 и Windows Server 2012.
Примечание. Это не позволит вам использовать эту цель при создании ярлыка, но позволит вам ее редактировать.
Наслаждайтесь!
Из скрипта Powershell вы можете попробовать это. У меня была только одна версия сборки в GAC, так что это работало просто отлично.
cd "c:\Windows\Microsoft.NET\assembly\GAC_MSIL\"
Get-ChildItem assemblypath -Recurse -Include *.dll | Copy-Item -Destination "c:\folder to copy to"
где путь сборки может использовать подстановочные знаки.
Еще одно направление - просто распакуйте файл MSI и получите вкусности таким образом. Спасает вас от возможного удаления. , ,
Копирование из командной строки не требуется. Я набрал имя DLL из поиска в окне «Пуск». Я выбрал See More Results. Один в GAC был возвращен в окне поиска. Я щелкнул правой кнопкой мыши по нему и сказал, что открыть файл. Открывался в обычном проводнике Windows. Я скопировал файл. Я закрыл окно. Готово.