2012-05-22 26 views
8

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> 
+0

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 ? –

+0

@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

+0

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

Trả lời

7

Sau khi bạn đã chỉnh sửa câu hỏi của bạn nó trở nên rõ ràng rằng đây là tập tin chính sách ảnh hưởng đến lắp ráp ràng buộc.

Trong trường hợp của Oracle có một tập tin gọi là Policy.XYOracle.DataAccess.config với những nội dung tương tự như sau:

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/> 
      <bindingRedirect oldVersion="10.1.0.000-10.2.0.100" newVersion="10.2.0.100"/> 
     </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

Chính sách này được cài đặt bởi trình cài đặt Oracle và chuyển hướng Oracle.DataAccess.dll lên phiên bản mới nhất, như Oracle tin rằng thư viện tương thích ngược.

EDIT: Nếu bạn không muốn publisher policy được áp dụng cho một hội đồng đặc biệt, đưa nguyên tố này trong các yếu tố:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
     <assemblyIdentity name="myAssembly" publicKeyToken="..." culture="en-us" /> 
     <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" /> 
      <publisherPolicy apply="no" /> 
    </dependentAssembly> 
</assemblyBinding> 
+0

Tôi đã thử với '' nhưng nó không giải quyết được vấn đề. Tôi đọc [ở đây] (http://msdn.microsoft.com/en-us/library/7wd6ex19.aspx) mà tôi có thể sử dụng '' để bỏ qua các chính sách nhưng vẫn là vấn đề tương tự. .. – Ucodia

+0

@ Ucodia: thật lạ lùng. Bạn đang tham khảo v4.112.3.0 trong ứng dụng của mình? Có lẽ bạn nên thử bao gồm một loạt các phiên bản (ví dụ: '0.0.0.0-4.65535.65535.65535') để xem điều này có hiệu quả không? –

+0

Tôi tham khảo cụ thể 4.112.2.1. Tôi đã cập nhật câu hỏi của mình với một số phát hiện mới. Có vẻ như chính sách được xuất bản trong GAC sẽ ghi đè bất kỳ cấu hình ứng dụng nào. – Ucodia

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