Có một gói tôi phải đối phó với việc cài đặt các cụm lắp ráp trực tiếp vào GAC (ví dụ: ở đâu đó sâu trong% windows% / assembly).
Làm cách nào để trừ tập hợp thực tế (DLL) từ GAC vào hệ thống tệp bình thường?
Cảm ơn.
Có một gói tôi phải đối phó với việc cài đặt các cụm lắp ráp trực tiếp vào GAC (ví dụ: ở đâu đó sâu trong% windows% / assembly).
Làm cách nào để trừ tập hợp thực tế (DLL) từ GAC vào hệ thống tệp bình thường?
Cảm ơn.
Câu trả lời:
Tôi đã sử dụng lời khuyên từ bài viết này để có được một hội đồng từ GAC.
Nhận DLL ra khỏi GAC
Các tệp DLL một khi được triển khai trong GAC (thường được đặt tại c: \ windows \ assembly) không thể được xem hoặc sử dụng như một tệp DLL bình thường. Họ không thể được tham khảo trực tiếp từ dự án VS. Các nhà phát triển thường giữ một bản sao của tệp DLL gốc và tham chiếu nó trong dự án tại thời điểm phát triển (thiết kế), sử dụng lắp ráp từ GAC trong thời gian chạy dự án.
Trong quá trình thực thi (thời gian chạy) nếu tìm thấy lắp ráp được ký và triển khai trong GAC, CLR sẽ tự động lấy cụm từ GAC thay vì DLL được tham chiếu trong thời gian thiết kế trong VS. Trong trường hợp nhà phát triển đã xóa DLL gốc hoặc không có nó vì một số lý do, có một cách để lấy tệp DLL từ GAC. Thực hiện theo các bước sau để sao chép DLL từ GAC
Chạy bộ đệm / u C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ shfusion.dll
- shfusion.dll là một DLL mở rộng trình thám hiểm mang lại cái nhìn khác biệt cho thư mục GAC. Việc hủy đăng ký tệp này sẽ xóa trình xem bộ đệm bộ đệm và thư mục GAC sẽ hiển thị như bất kỳ thư mục bình thường nào trong trình thám hiểm.
Mở ra %% Windir% \ assembly \ GAC_MSIL.
Duyệt đến thư mục DLL của bạn vào sâu để tìm DLL của bạn.
Sao chép DLL ở đâu đó trên đĩa cứng của bạn và giới thiệu nó từ đó trong dự án của bạn
Chạy "personas% Windir% \ Microsoft.NET \ Framework \ <. Thư mục phiên bản NET> \ shfusion.dll" để đăng ký lại tệp shfusion.dll và lấy lại giao diện khác biệt ban đầu của GAC.
shfusion.dll
không hỗ trợ DllInstall()
điểm vào được gọi regsvr32
khi được thông qua /i
tùy chọn. Bỏ qua tùy chọn đó cho phép đăng ký lại thành phần.
Phương pháp được mô tả ở đây rất dễ dàng:
Tóm tắt từ Điều:
\\YourServer\C$\Windows\Assembly
)Mở Dấu nhắc Lệnh và Loại:
cd c:\windows\assembly\GAC_MSIL
xcopy . C:\GacDump /s /y
Điều này sẽ cung cấp cho bãi chứa của toàn bộ GAC
Thưởng thức!
Đúng.
Thêm khóa đăng ký DisableCacheViewer
Tạo khóa từ mới trong HKLM \ Software \ Microsoft \ Fusion \ với tên DisableCacheViewer và đặt giá trị [DWORD] thành 1.
Quay trở lại Windows Explorer vào thư mục lắp ráp và nó sẽ là chế độ xem hệ thống tệp bình thường.
Tôi nghĩ cách dễ nhất là làm điều đó thông qua dòng lệnh như David đề cập. Thủ thuật duy nhất là không chỉ đơn giản là tại C: \ Windows \ hội. Bạn phải điều hướng đến C: \ Windows \ hội \ GAC \ [ASSEMBLY_NAME] \ [VERSION_NUMBER] _ [KEY PUBLIC]. Sau đó, bạn có thể thực hiện một bản sao bằng cách sử dụng:
sao chép [ASSEMBLY_NAME] đậm c: \ (hoặc bất kỳ vị trí nào bạn muốn)
Mong rằng sẽ giúp.
Cách dễ dàng tôi đã tìm thấy là mở dấu nhắc lệnh và duyệt qua thư mục bạn đề cập cho đến khi bạn tìm thấy DLL bạn muốn - sau đó bạn có thể sử dụng lệnh sao chép để lấy nó ra. Windows Explorer có giao diện đặc biệt "hữu ích" của thư mục này.
Mở RUN sau đó gõ %windir%\assembly\GAC_MSIL
, điều này sẽ mở dlls của bạn trong chế độ xem thư mục, sau đó bạn có thể điều hướng đến thư mục có tên dll của bạn và mở nó, bạn sẽ tìm thấy tệp dll của mình và sao chép nó dễ dàng
Tôi là tác giả của PowerShell GAC . Với PowerShell GAC, bạn có thể trích xuất các cụm từ GAC mà không phụ thuộc vào nội bộ GAC như thay đổi cấu trúc thư mục.
Get-GacAssembly SomeCompany* | Get-GacAssemblyFile | Copy-Item -Dest C:\Temp\SomeCompany
Bài đăng trên blog MSDN này mô tả ba cách riêng biệt để trích xuất một DLL từ GAC. Một bản tóm tắt hữu ích của các phương pháp cho đến nay được đưa ra.
Hãy nghĩ rằng tôi đã tìm ra một cách để nhìn vào bên trong GAC mà không cần sửa đổi sổ đăng ký hoặc sử dụng dòng lệnh, powershell hoặc bất kỳ chương trình nào khác:
Tạo một lối tắt mới (đến bất cứ nơi nào). Sau đó sửa đổi các phím tắt để có mục tiêu là:
%windir%\assembly\GAC_MSIL\System
Mở phím tắt này sẽ đưa bạn đến thư mục Hệ thống bên trong GAC (mọi người nên có) và có tác dụng phụ tuyệt vời là cho phép bạn chuyển sang thư mục cao hơn và sau đó duyệt vào bất kỳ thư mục nào khác bạn muốn (và xem các tệp dll, v.v.)
Tôi đã thử nghiệm điều này trên windows 7 và windows server 2012.
Lưu ý: Nó sẽ không cho phép bạn sử dụng mục tiêu đó khi tạo lối tắt nhưng nó sẽ cho phép bạn chỉnh sửa nó.
Thưởng thức!
Từ một kịch bản Powershell, bạn có thể thử điều này. Tôi chỉ có một phiên bản lắp ráp trong GAC vì vậy nó hoạt động tốt.
cd "c:\Windows\Microsoft.NET\assembly\GAC_MSIL\"
Get-ChildItem assemblypath -Recurse -Include *.dll | Copy-Item -Destination "c:\folder to copy to"
nơi đường dẫn lắp ráp có thể sử dụng ký tự đại diện.
Một hướng khác - chỉ cần giải nén tệp MSI và nhận các tính năng theo cách đó. Cứu bạn khỏi việc gỡ cài đặt cuối cùng. . .
Sao chép từ một dòng lệnh là không cần thiết. Tôi đã gõ tên của DLL từ tìm kiếm Start Window. Tôi đã chọn Xem thêm kết quả. Một trong GAC đã được trả lại trong cửa sổ tìm kiếm. Tôi nhấp chuột phải vào nó và nói vị trí tập tin mở. Nó đã mở trong Windows Explorer bình thường. Tôi đã sao chép tập tin. Tôi đóng cửa sổ. Làm xong.