Я маю справу, з яким я маю справу, який встановлює збірки прямо в 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 для Explorer, яке надає чіткий вигляд папці GAC. Якщо зареєструвати цей файл, вилучите переглядач кеш-складання, і папка GAC буде видно як будь-яка звичайна папка в Провіднику.
Відкрийте "% windir% \ Assembly \ GAC_MSIL".
Перейдіть до папки DLL вглиб, щоб знайти свою DLL.
Скопіюйте DLL кудись на жорсткий диск і відправте його звідти у своєму проекті
Запустіть "regsvr32% windir% \ Microsoft.NET \ Framework \ <. Каталог версій NET> \ 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
Це повинно дати скидання всього ГАК
Насолоджуйтесь!
Так.
Додати ключ реєстру 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 та легко скопіюйте його.
Я автор PowerShell GAC . За допомогою PowerShell GAC ви можете витягувати збірки з GAC, не залежно від внутрішніх даних GAC, як-от зміна структури папок.
Get-GacAssembly SomeCompany* | Get-GacAssemblyFile | Copy-Item -Dest C:\Temp\SomeCompany
Ця публікація в блозі MSDN описує три окремі способи вилучення DLL з GAC. Корисне резюме наведених методик.
Подумайте, я придумав спосіб заглянути всередині GAC, не змінюючи реєстр, не використовуючи командний рядок, powerhell або будь-які інші програми:
Створіть новий ярлик (куди завгодно). Потім змініть ярлик, щоб мета була такою:
%windir%\assembly\GAC_MSIL\System
Якщо відкрити цей ярлик, ви перейдете до папки 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 з пошуку «Вікно запуску». Я вибрав Див. Більше результатів. Той, хто в GAC, повернувся у вікні пошуку. Я правою кнопкою миші натиснув на нього і сказав, що відкрити розташування файлу Він відкрився в звичайному Windows Explorer. Я скопіював файл. Я закрив вікно. Зроблено.