Есть пакет, с которым мне приходится иметь дело, который устанавливает сборки прямо в 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
опции. Отказ от этой опции позволяет успешно перерегистрировать компонент.Метод, описанный здесь, очень прост:
http://andreasglaser.net/post/2008/08/05/Extract-assembly-from-Global-Assembly-Cache-(GAC)-with-network-drive-mapping.aspx
Резюме из статьи:
\\YourServer\C$\Windows\Assembly
)источник
Откройте командную строку и введите:
Это должно дать дамп всего 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, таких как изменение структуры папок.
источник
Этот пост в блоге MSDN описывает три отдельных способа извлечения DLL из GAC. Полезное краткое изложение методов, приведенных до сих пор.
источник
Вместо этого используйте браузер файлов "Total Commander".
источник
Думаю, я нашел способ заглянуть внутрь GAC, не изменяя реестр и не используя командную строку, powershell или любые другие программы:
Создайте новый ярлык (в любом месте). Затем измените ярлык, чтобы цель была:
Открытие этого ярлыка приводит вас к системной папке внутри GAC (что должно быть у каждого) и имеет замечательный побочный эффект: вы можете переключиться на более высокий каталог, а затем перейти в любую другую папку, которую вы хотите (и увидеть файлы dll и т. Д.)
Я проверил это на Windows 7 и Windows Server 2012.
Примечание. Это не позволит вам использовать эту цель при создании ярлыка, но позволит вам ее редактировать.
Наслаждайтесь!
источник
просто перейдите в C: \ Windows, найдите папку [Assembly], щелкните правой кнопкой мыши и выберите Добавить в архив.
подождите немного
vola у вас есть архивный файл, содержащий все сборки в вашем GAC
источник
Из скрипта Powershell вы можете попробовать это. У меня была только одна версия сборки в GAC, так что это работало просто отлично.
где путь сборки может использовать подстановочные знаки.
источник
Еще одно направление - просто распакуйте файл MSI и получите вкусности таким образом. Спасает вас от возможного удаления. , ,
источник
Копирование из командной строки не требуется. Я набрал имя DLL из поиска в окне «Пуск». Я выбрал See More Results. Один в GAC был возвращен в окне поиска. Я щелкнул правой кнопкой мыши по нему и сказал, что открыть файл. Открывался в обычном проводнике Windows. Я скопировал файл. Я закрыл окно. Готово.
источник