2009-07-22 24 views
5

Có cách nào để buộc sử dụng phiên bản dll cụ thể không? từ app.config?Có cách nào để buộc sử dụng phiên bản dll không?

(hậu trường) Chúng tôi đang sử dụng SQL Compact 3.5 và không thể vì lý do kinh doanh (yea, tôi biết) chuyển sang SQL Compact 3.5 SP1 cho thời điểm này. Chúng ta có System.Data.SqlServerCe và tất cả các dlls không được quản lý trong thư mục build của chúng ta, nhưng nếu SP1 được cài đặt, ứng dụng sẽ tải lên và sử dụng dll được quản lý SP1 (và mở rộng, tôi cũng giả sử các file không được quản lý).

Số phiên bản của dll pre-sp1 là 3.5.0.0, phiên bản sp1 là 3.5.1.0

tôi đã thiết lập các tham chiếu đến System.Data.SqlServerCe để CopyLocal = true và cụ thể Phiên bản = đúng, nhưng nó vẫn sử dụng phiên bản SP1, ngay cả khi phiên bản pre-sp1 nằm trong thư mục build của chúng tôi (giả sử nó sử dụng một từ GAC). Tôi đã thử thêm các tài liệu tham khảo từ GAC, cũng như tự đi vào hệ thống tập tin và tham khảo dll trực tiếp.

(chỉ để làm cho nó rõ ràng, khách hàng đang cài đặt gói dịch vụ cho các phần mềm khác mà cần nó, nhưng chúng ta cần phải vẫn chạy phiên bản pre-sp1 ngay cả khi gói dịch vụ được cài đặt)

Có cách để buộc. Net để sử dụng một trong chúng tôi có trong thư mục xây dựng của chúng tôi?

UPDATE:

tôi đặt một ghi đè trong cấu hình ứng dụng như this question, nhưng chạy người xem log lắp ráp ràng buộc mang lại cho tôi điều này:

LOG: This bind starts in default load context. 
LOG: Using application configuration file: C:\Projects\ConsoleApplication11\bin\Debug\ConsoleApplication11.exe.Config 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config. 
LOG: Redirect found in application configuration file: 3.5.0.0 redirected to 3.5.0.0. 
LOG: Publisher policy file is found at C:\Windows\assembly\GAC_MSIL\policy.3.5.System.Data.SqlServerCe\3.5.0.0__89845dcd8080cc91\publisher.config. 
LOG: Publisher policy file redirect is found: 3.5.0.0 redirected to 3.5.1.0. 
LOG: ProcessorArchitecture is locked to MSIL. 
LOG: Post-policy reference: System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL 
LOG: Found assembly by looking in the GAC. 
LOG: Binding succeeds. Returns assembly from C:\Windows\assembly\GAC_MSIL\System.Data.SqlServerCe\3.5.1.0__89845dcd8080cc91\System.Data.SqlServerCe.dll. 
LOG: Assembly is loaded in default load context. 

Dường như cấu hình cho 3.5. 1 lắp ráp trong GAC là ghi đè nó. Bất kỳ cách nào để buộc các vấn đề từ app.config của tôi?

Trả lời

5

Tôi đã tìm thấy giải pháp. Nhìn vào liên kết trong câu trả lời của Henk (here) và đầu ra của nhật ký tổng hợp, có vẻ như trình cài đặt 3.5 SP1 cài đặt tệp chính sách dành cho nhà xuất bản buộc tải tệp dll sp1, ngay cả khi yêu cầu dll trước sp1.

Đưa này trong app.config kể net để bỏ qua chủ trương nhà xuất bản, và kết thúc bằng cách sử dụng phiên bản 3.5.0.0:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
       <assemblyIdentity name="System.Data.SqlServerCe" publicKeyToken="89845dcd8080cc91" /> 
       <publisherPolicy apply="no"/> 
      </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 
0

Có vẻ như bạn có phiên bản 3.5.1.0 được tham chiếu trong dự án. Tôi sẽ thử loại bỏ các tài liệu tham khảo cho 3.5.1.0, nếu nó được liệt kê theo tài liệu tham khảo của dự án, và sau đó trực tiếp tham khảo dll 3.5.0.0 mà bạn muốn sử dụng để thay thế. Tuy nhiên, không nên nhắm mục tiêu các dll cũ hơn nếu máy chủ đã được nâng cấp lên SP1 (mặc dù các gói dịch vụ nên vẫn duy trì khả năng tương thích ngược từ quan điểm API).

+1

Không, chúng tôi đang tham khảo 3.5.0.0. Máy chủ đang ở trước sp1, đó là sự cố, vì các lần sao chép bằng cách sử dụng máy khách sp1 và máy chủ trước sp1 (nâng cấp máy chủ sẽ xảy ra, chỉ trong vài tháng tới - băng đỏ và tất cả những thứ đó) – Gareth

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