Как извлечь сборку из GAC? - программирование

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

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

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

Спасибо.

4b9b3361

Ответ 1

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

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

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

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

  • Запустите regsvr32/u C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\shfusion.dll

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

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

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

  • Запустить "regsvr32% windir%\Microsoft.NET\Framework\<.NET каталог версий > \shfusion.dll" на перерегистрируйте файл shfusion.dll и восстановить оригинальное GAC.

Ответ 2

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

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

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

  • Отобразить сетевой диск (проводник → Инструменты)
    • Карта в\имя_сервера\папка (\\YourServer\C$\Windows\Assembly)
  • Нет необходимости в совместном использовании, если вы являетесь Администратором.
  • Найдите диск и извлеките свою сборку

Ответ 3

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

cd  c:\windows\assembly\GAC_MSIL 

xcopy . C:\GacDump /s /y

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

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

Ответ 4

Да.

Добавить ключ реестра DisableCacheViewer

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

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

Ответ 5

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

скопировать [ASSEMBLY_NAME].dll c:\(или любое другое местоположение)

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

Ответ 9

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

Ответ 10

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

  • Включить настройку "показать скрытые/системные файлы" в Total Commander
  • Перейдите в раздел "c:\windows\assembly"
  • Копия

Ответ 11

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

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

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

Ответ 12

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

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

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

Ответ 13

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

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

%windir%\assembly\GAC_MSIL\System

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

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

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

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

Ответ 14

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

Ответ 15

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