2012-01-31 35 views
7

Giả sử tôi có hai dự án, P4 và P3, nhắm mục tiêu .net 4.0 và 3.5 tương ứng.Ứng dụng .Net của tôi có thể tham chiếu hai phiên bản khác nhau của thư viện khung .net không?

Mỗi dự án cũng có tham chiếu đến System.Data. Trong trường hợp của P4, nó sẽ được System.Data v4.0.0.0 Trong trường hợp của P3, nó sẽ được System.Data v2.0.0.0

Dự án P4 cũng tham chiếu P3.

Nếu P4 được tải và thực hiện, nó sử dụng .net 4.0 CLR. Trong thời gian chạy, tham chiếu đến System.Data dường như giải quyết với v4.0 bên trong cả P4 và P3. Tôi có thể ghi đè lên điều này bằng cách sử dụng assemblyBinding chuyển hướng, nhưng sau đó cả P4 và P3 giải quyết để v2.0.

Có cách nào tôi có thể định cấu hình ứng dụng của mình để P4 sử dụng v4.0 và P3 sử dụng v2.0 không?

Trả lời

3

Nếu bạn có quyền kiểm soát P3, có. Đi đến phần tham chiếu của dự án, tìm tham chiếu System.Data và xem cửa sổ thuộc tính của nó (nhấp chuột phải -> Thuộc tính).

Chọn "True" cho thuộc tính "Phiên bản cụ thể". Biên dịch lại, triển khai lại, vv

Lưu ý rằng điều này sẽ gây ra tất cả các lỗi thời gian chạy nếu .NET 2, 3 hoặc 3.5 không được cài đặt trên máy khi lắp ráp cố gắng tải.

Sửa

tôi đã cố gắng này, nhưng không có may mắn. P3 vẫn chạy v4.0. Bạn có biết nếu cài đặt này có hiệu ứng hiển thị trong assembly được tạo cho P3 không? Ví dụ. Tệp kê khai cho biết ".ver 2: 0: 0: 0" liệu "Phiên bản cụ thể" có được đặt thành true hay không.

Hãy thử thêm này để app.config của bạn:

<configuration> 
    <startup> 
    <supportedRuntime version="v2.0.50727" /> 
    <supportedRuntime version="v4.0" /> 
    </startup> 
</configuration> 
+0

Tôi đã thử điều này, nhưng không có may mắn. P3 vẫn chạy v4.0. Bạn có biết nếu cài đặt này có hiệu ứng hiển thị trong assembly được tạo cho P3 không? Ví dụ. Tệp kê khai cho biết ".ver 2: 0: 0: 0" liệu "Phiên bản cụ thể" có được đặt thành true hay không. – Rob

+1

Có - đó là những gì tôi đã làm theo lời khuyên của Seb. Tôi cũng cần xác định useLegacyV2RuntimeActivationPolicy = "true" như một thuộc tính trong thẻ khởi động. Nếu không, nó đã bị lỗi với Ngoại lệ không khớp: System.BadImageFormatException – Rob

+0

Tuyệt vời. Liên kết của anh là điều khiến tôi nhớ đến cấu hình nên chắc chắn chấp nhận câu trả lời của anh. – Randolpho

4

Có xem xét này: In-Process Side-by-Side Nó có thể là giúp đỡ một số.

+1

Có - điều đó đã xảy ra! – Rob

+0

Xin lỗi. Tôi là một thằng ngốc. Thật không may điều này đã không giúp đỡ, trừ khi tôi đang thiếu một cái gì đó. Tôi quản lý để uncomment assemblyBinding chuyển hướng trong khi kiểm tra này. Nếu không có chuyển hướng, nó không hoạt động. – Rob

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