2012-12-18 32 views
7

Tôi có một DLL đã đăng ký trong GAC có lỗi trong đó (v4.2.0).Cập nhật các tập tin GAC

Do đó, tôi đã khắc phục lỗi đó, chỉ cập nhật phiên bản tệp (v4.2.1) (giữ phiên bản lắp ráp, v4.2.0) và tạo gói MSI mới.

Vấn đề là DLL chưa được cài đặt trong GAC. Tôi đã xác minh điều này bằng cách nhấp chuột phải vào tệp DLL trong C:\Windows\Microsoft.NET\assembly\GAC_MSIL\MyDLL\v4.0_4.2.0.0__2269313d92725976 và đã kiểm tra phiên bản tệp, vẫn là v4.2.0 Cũng không có thư mục nào khác được tạo theo C:\Windows\Microsoft.NET\assembly\GAC_MSIL\MyDLL.

Nhưng! Nếu tôi gỡ cài đặt phiên bản đầu tiên và sau đó cài đặt DLL mới, nó sẽ được cài đặt OK trong GAC.

Tôi có đang tiếp cận cách này sai không? Ứng dụng của chúng tôi được thiết lập để sử dụng các phiên bản cụ thể, vì vậy chỉ cần tạo phiên bản lắp ráp v4.3.0 và cài đặt nó trong GAC sẽ không hoạt động.

Cập nhật

tôi đã tìm thấy các bài viết về chính sách nhà xuất bản (http://support.microsoft.com/kb/891030) và đang cố gắng thay thế. Tôi đã tạo ra hội đồng chính sách. Nhưng Visual Studio gặp sự cố khi tôi cố thêm nó vào dự án thiết lập = (

Tôi cũng đã cố gắng thêm nó làm tệp nội dung cho dự án chính (và sau đó thêm tệp nội dung vào GAC). về lắp ráp không được ký kết.

Vì vậy, tôi vẫn bị mắc kẹt.

Trả lời

4

Cập nhật [AssemblyFileVersion] cho một bản vá lỗi thường là cách tiếp cận đúng, mặc dù nó được iffy nếu bạn làm như vậy cho một assembly vào GAC. Bạn chạy các nguy cơ phá vỡ một ứng dụng khác mà cũng sử dụng lắp ráp và vô ý phụ thuộc vào hành vi buggy để hoạt động chính xác. Một sai lầm không chủ ý như đổi tên một phương pháp công cộng là tất nhiên luôn luôn là một cách tốt để phá vỡ một ứng dụng, con đường đến DLL Hell được lát bằng nhiều ý định tốt mà hóa ra xấu.

Tuy nhiên, GAC chỉ chú ý đến [AssemblyVersion] và bỏ qua phiên bản tệp. Để có được bản lắp ráp được cập nhật để thay thế bản lắp ráp hiện tại, bạn phải loại bỏ bản cũ trước. Đây là cố ý, ngăn ngừa sự thay thế ngẫu nhiên.

A <bindingRedirect> trong tệp .config của ứng dụng bạn muốn sửa chữa sẽ dễ dàng hơn nhiều để thực hiện hơn chính sách của nhà xuất bản.

+0

Vâng. Gỡ cài đặt phiên bản cũ và cài đặt phiên bản mới đã làm nó. Vẫn cảm ơn phiên bản cho phiên bản tệp – jgauffin

0

tôi tin rằng điều này đã làm với những gì các thông số của một assembly .NET GAC sử dụng để cung cấp cho nó một định danh duy nhất. Nếu phiên bản lắp ráp là một trong những thông số duy nhất, nhưng phiên bản tập tin không phải là, có thể giải thích các triệu chứng của bạn.Đặc biệt điều này liên quan đến GACs cần cho một hội đồng được đặt tên mạnh

Liên kết này nói càng nhiều

http://msdn.microsoft.com/en-us/library/wd40t7ad.aspx

+0

Sử dụng cùng phiên bản lắp ráp nhưng các phiên bản tệp khác nhau được cho là cách thêm "cập nhật" vào phiên bản hiện tại như được giải thích tại đây: http://blogs.msdn.com/b/junfeng/archive/2004/02/14 /72666.aspx – jgauffin

+0

Ok, điều đó có hiệu quả với bạn không? Tôi nghĩ rằng hệ thống của bạn phụ thuộc vào phiên bản tập tin? – cowboydan

Các vấn đề liên quan