Jest pakiet, z którym mam do czynienia, który instaluje zestawy bezpośrednio do GAC (np. Gdzieś głęboko w% windows% / assembly).
Jak egzorcyzmować rzeczywisty zestaw (bibliotekę DLL) z GAC do normalnego systemu plików?
Dzięki.
Jest pakiet, z którym mam do czynienia, który instaluje zestawy bezpośrednio do GAC (np. Gdzieś głęboko w% windows% / assembly).
Jak egzorcyzmować rzeczywisty zestaw (bibliotekę DLL) z GAC do normalnego systemu plików?
Dzięki.
Odpowiedzi:
Skorzystałem z porady z tego artykułu, aby uzyskać zestaw z GAC.
Pobierz DLL z GAC
Biblioteki DLL raz wdrożone w GAC (zwykle zlokalizowane w c: \ windows \ assembly) nie mogą być przeglądane ani używane jako normalne pliki DLL. Nie można się do nich odwoływać bezpośrednio z projektu VS. Deweloperzy zwykle przechowują kopię oryginalnego pliku DLL i odwołują się do niej w projekcie w czasie programowania (projektowania), który wykorzystuje zestaw z GAC w czasie wykonywania projektu.
Podczas wykonywania (w czasie wykonywania), jeśli okaże się, że zestaw jest podpisany i wdrożony w GAC, środowisko CLR automatycznie pobiera zestaw z GAC zamiast z biblioteki DLL, do której odwołuje się podczas projektowania w VS. W przypadku, gdy programista usunął oryginalną bibliotekę DLL lub z jakiegoś powodu jej nie ma, istnieje sposób na pobranie pliku DLL z GAC. Wykonaj następujące kroki, aby skopiować bibliotekę DLL z GAC
Uruchom regsvr32 / u C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ shfusion.dll
- shfusion.dll jest rozszerzeniem DLL eksploratora, który nadaje folderowi GAC inny wygląd. Wyrejestrowanie tego pliku spowoduje usunięcie przeglądarki pamięci podręcznej zestawu, a folder GAC będzie wtedy widoczny jako każdy normalny folder w eksploratorze.
Otwórz „% windir% \ assembly \ GAC_MSIL”.
Przejdź do folderu DLL w głąb, aby znaleźć bibliotekę DLL.
Skopiuj bibliotekę DLL gdzieś na dysku twardym i skieruj ją stamtąd w swoim projekcie
Uruchom „regsvr32% windir% \ Microsoft.NET \ Framework \ <katalog wersji .NET> \ shfusion.dll”, aby ponownie zarejestrować plik shfusion.dll i przywrócić oryginalny, odrębny widok GAC.
shfusion.dll
nie obsługuje DllInstall()
punktu wejścia wywoływanego przez regsvr32
po przekazaniu /i
opcji. Pominięcie tej opcji umożliwia pomyślną ponowną rejestrację komponentu.
Opisana tutaj metoda jest bardzo prosta:
Podsumowanie z artykułu:
\\YourServer\C$\Windows\Assembly
)Otwórz wiersz polecenia i wpisz:
cd c:\windows\assembly\GAC_MSIL
xcopy . C:\GacDump /s /y
To powinno dać zrzut całego GAC
Cieszyć się!
Tak.
Dodaj klucz rejestru DisableCacheViewer
Utwórz nowy klucz dword w HKLM \ Software \ Microsoft \ Fusion \ o nazwie DisableCacheViewer i ustaw jego wartość [DWORD] na 1.
Wróć do Eksploratora Windows do folderu zespołu i będzie to normalny widok systemu plików.
Myślę, że najłatwiej jest zrobić to za pomocą wiersza poleceń, o którym wspomina David. Jedyna sztuczka polega na tym, że plik .dll nie znajduje się po prostu w C: \ Windows \ Assembly. Musisz przejść do C: \ Windows \ Assembly \ GAC \ [ASSEMBLY_NAME] \ [VERSION_NUMBER] _ [PUBLIC KEY]. Następnie możesz wykonać kopię za pomocą:
skopiuj [ASSEMBLY_NAME] .dll c: \ (lub dowolną lokalizację)
Mam nadzieję, że to pomoże.
Prostym sposobem, jaki znalazłem, jest otwarcie wiersza polecenia i przeglądanie wymienionego folderu, aż znajdziesz żądaną bibliotekę DLL - możesz następnie użyć polecenia kopiowania, aby go usunąć. Eksplorator Windows ma „pomocny” specjalny widok tego folderu.
Otwórz RUN, a następnie wpisz %windir%\assembly\GAC_MSIL
, spowoduje to otwarcie twoich dll w widoku folderów, możesz następnie przejść do nazwanego folderu dll i otworzyć go, znajdziesz plik dll i łatwo go skopiujesz
Jestem autorem PowerShell GAC . Dzięki PowerShell GAC możesz wyodrębniać zestawy z GAC bez polegania na elementach wewnętrznych GAC, takich jak zmiana struktury folderów.
Get-GacAssembly SomeCompany* | Get-GacAssemblyFile | Copy-Item -Dest C:\Temp\SomeCompany
W tym poście na blogu MSDN opisano trzy różne sposoby wyodrębniania biblioteki DLL z GAC. Przydatne podsumowanie dotychczas podanych metod.
Myślę, że znalazłem sposób, aby zajrzeć do GAC bez modyfikowania rejestru lub korzystania z wiersza poleceń, PowerShell lub innych programów:
Utwórz nowy skrót (do dowolnego miejsca). Następnie zmodyfikuj skrót, aby cel był:
%windir%\assembly\GAC_MSIL\System
Otwarcie tego skrótu przenosi Cię do folderu System w GAC (który każdy powinien mieć) i ma wspaniały efekt uboczny, umożliwiając przejście do wyższego katalogu, a następnie przeglądanie dowolnego innego folderu, który chcesz (i przeglądanie plików dll itp.)
Przetestowałem to na Windows 7 i Windows Server 2012.
Uwaga: nie pozwoli ci to użyć tego celu podczas tworzenia skrótu, ale pozwoli ci go edytować.
Cieszyć się!
Możesz spróbować tego ze skryptu Powershell. Miałem tylko jedną wersję zespołu w GAC, więc to działało dobrze.
cd "c:\Windows\Microsoft.NET\assembly\GAC_MSIL\"
Get-ChildItem assemblypath -Recurse -Include *.dll | Copy-Item -Destination "c:\folder to copy to"
gdzie ścieżka zestawu może używać symboli wieloznacznych.
W innym kierunku - po prostu rozpakuj plik MSI i zdobądź w ten sposób gadżety. Oszczędza przed ewentualnym odinstalowaniem. . .
Kopiowanie z wiersza poleceń nie jest konieczne. Wpisałem nazwę biblioteki DLL z wyszukiwania w oknie Start. Wybrałem opcję Zobacz więcej wyników. Ten z GAC został zwrócony w oknie wyszukiwania. Kliknąłem go prawym przyciskiem myszy i powiedziałem, że otwórz lokalizację pliku. Otworzył się w normalnym Eksploratorze Windows. Skopiowałem plik. Zamknąłem okno. Gotowe.