Bối cảnhTại sao ứng dụng của tôi luôn sử dụng phiên bản GAC mới nhất thay vì phiên bản được tham chiếu?
Tôi có 2 phiên bản khác nhau của lắp ráp được cài đặt trong GAC, phiên bản 1.0 và phiên bản 2.0. Tôi đã tạo một ứng dụng đang tham chiếu 1.0 dưới dạng phiên bản cụ thể.
Issue
Khi tôi chạy ứng dụng của tôi, nó sẽ luôn luôn tải phiên bản 2.0 trong khi ứng dụng được đặc biệt tham khảo phiên bản 1.0.
Câu hỏi
Tại sao điều này xảy ra? Làm cách nào để buộc ứng dụng của tôi tải phiên bản đã được biên dịch? Nó không có vẻ với tôi rằng điều này có bất cứ điều gì để làm với chuyển hướng ràng buộc như ứng dụng của tôi thậm chí không nhận thức được phiên bản 2.0 khi tôi xây dựng nó và siêu dữ liệu "Phiên bản cụ thể" tham chiếu được đặt thành true.
Cảm ơn.
Edit:
Việc lắp ráp Tôi đang tham khảo thực sự là Oracle.DataAccess từ gói ODAC. Tôi nhận thấy rằng các hội đồng khác có tên là Policy.x.xxx.Oracle.DataAccess được xuất bản trong GAC.
Chỉnh sửa 2:
Sau khi xem xét các chính sách Oracle.DataAccess tôi thấy cấu hình định chuyển hướng liên kết:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/>
<bindingRedirect oldVersion="4.112.0.0-4.112.3.0" newVersion="4.112.3.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Mặc dù tôi đã thêm các đảo ngược ràng buộc chuyển hướng vào tôi cấu hình ứng dụng, chính sách trong GAC dường như có mức độ ưu tiên. Tôi tìm thấy một MSDN article điều trị vấn đề này và đề xuất để bỏ qua chính sách với cấu hình này:
<publisherPolicy apply="no" />
Nhưng nó vẫn không hoạt động ...
Sửa 3:
tôi đã cố gắng xóa chính sách khỏi GAC và khởi động lại máy của tôi. Nó cuối cùng đã làm việc. Nó không giống như một sự phát triển giải pháp confortable nhưng chính sách này đã phá vỡ một trong những ứng dụng của tôi có nghĩa là vô hiệu hóa chính sách là điều phải làm trong trường hợp của tôi.
Final:
Igor đã cho tôi câu trả lời đúng.Tất cả tôi phải làm gì để workaround các chính sách đó là sử dụng các thiết lập publisherPolicy
trong phần configruation phải:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/>
<publisherPolicy apply="no"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
Bạn đã kiểm tra rằng không có chính sách xuất bản cho hội đồng tham chiếu của bạn ? –
@IgorKorkhov: Có, tôi đã tìm thấy một cái gì đó có tên là Policy.x.xxx.MyAssemblyName trong GAC. Tôi đã không nhận thức được một cơ chế như vậy. Tôi chỉnh sửa câu hỏi của mình và bạn có thể gửi câu trả lời. Cảm ơn. – Ucodia
Câu hỏi tiếp tuyến: Vấn đề khiến bạn muốn sử dụng V1 là gì? Tôi sử dụng Oracle thỉnh thoảng, do đó, cảnh báo trước là forearmed :) – Ian