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

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

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

Благодарю.

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

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

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

Во время выполнения (время выполнения), если обнаружено, что assembly была подписана и развернута в 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 расширителя explorer, который дает отличный взгляд на папку GAC. Отмена регистрации этого файла приведет к удалению средства просмотра кеша сборки, и тогда папка GAC будет видна как любая обычная папка в проводнике.
  2. Откройте «% windir% \ assembly \ GAC_MSIL».

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

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

  5. Запустите «regsvr32% windir% \ Microsoft.NET \ Framework \ <. NET version directory> \ shfusion.dll”, чтобы перерегистрировать файл shfusion.dll и вернуть исходный отчетный вид GAC.

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

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 

Это должно дать свалку всего ПКК

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

Да.

Добавить ключ реестра 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-версию. Затем вы можете использовать команду копирования, чтобы получить ее. Проводник 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. Полезное резюме методов, которые даны до сих пор.

Вместо этого используйте браузер файлов «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 

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

Я тестировал это на Windows 7 и на сервере Windows 2012.

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

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

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

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

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

Еще одно направление – просто распакуйте MSI-файл и получите полезные свойства. Экономит вас от возможной деинсталляции. , ,

Копирование из командной строки не требуется. Я ввел имя DLL из windows «Поиск в окне». Я выбрал больше результатов. Тот, что был в GAC, был возвращен в окне поиска. Я щелкнул правой кнопкой мыши по нему и сказал, что открытое местоположение файла. Он открывается в обычном Проводнике Windows. Я скопировал файл. Я закрыл окно. Готово.

  • Почему медленная инструкция цикла? Не удалось ли Intel эффективно внедрить его?
  • Вызов функции стандартной библиотеки C из asm в Visual Studio
  • Использование разных версий одной и той же сборки в одной папке
  • Возможно ли одноуровневое многоязычное развертывание Windows Forms (ILMerge и спутниковые сборки / локализация)?
  • Как я могу просмотреть MSIL / CIL, сгенерированный компилятором C #? Почему это называется сборкой?
  • Почему XCHG reg, reg 3 инструкции по микрооперации на современных архитектурах Intel?
  • Как объединить несколько сборок в один?
  • Visual Studio 2010 не создает перед запуском при изменении кода
  • Безопасно ли читать конец конца буфера на одной странице на x86 и x64?
  • Как определить, была ли assembly .NET построена для x86 или x64?
  • Дополнительная информация о макете памяти исполняемой программы (процесса)
  • Давайте будем гением компьютера.