2008-10-09 40 views
13

Chúng tôi có một số lib phổ biến. Lý tưởng nhất là chúng tôi muốn tất cả chúng sử dụng phiên bản mới nhất của một dll ngay cả khi họ đã được biên dịch chống lại một phiên bản khác nhau cũ (giả định phiên bản mới nhất tương thích ngược)Visual Studio Tham khảo và phiên bản - cách hoạt động?

ví dụ như chúng ta có:

dll Dự án
chung điều khiển dll
Ghi nhật ký dll
Cơ sở dữ liệu truy cập dll

Dự án và điều khiển chung tham chiếu v2 của cơ sở dữ liệu dll. Tuy nhiên, ghi nhật ký tham chiếu v1.

Nếu các phiên bản khác nhau được tham chiếu trong các thành phần khác nhau thì VS chọn loại nào để sử dụng?
Chúng tôi có phải biên dịch lại dll v1 để sử dụng cơ sở dữ liệu mới nhất (v2) hoặc chúng tôi có thể nhận thông tin này để tự động nhận không?
Có thể bắt buộc sử dụng một phiên bản cụ thể không?

Cảm ơn,

Alex

Trả lời

11

Theo mặc định, cho DLL là phiên bản tôi tin rằng VS sẽ buộc một kết hợp chính xác. Tuy nhiên, nếu bạn nhìn vào các thuộc tính của tham chiếu, bạn sẽ tìm thấy thuộc tính có tên là "Phiên bản cụ thể". Đặt thành "false" và nó sẽ khớp với các phiên bản sau.

Tôi không có phiên bản đầy đủ của VS với tôi để tìm một liên kết MSDN phù hợp, thật không may. Bạn cũng có thể sử dụng phần tử assemblyBinding trong app.config.

+0

Cảm ơn bạn đã lắp rápLiên kết liên kết nhưng không thể tìm thấy thuộc tính phiên bản cụ thể này trong vs2008 cho dự án trang web? – alexmac

+0

Ah thuộc tính phiên bản cụ thể nằm trong dự án lớp và dự án ứng dụng web nhưng không phải dự án trang web – alexmac

+0

Đối với phương pháp lập trình, ' False' có thể được thêm vào từng tham chiếu trong dự án mà bạn muốn siêu dữ liệu phiên bản được tách riêng . –

1

Nếu bạn có nguồn, bạn có thể sử dụng tham chiếu dự án thay vì tham chiếu dll. Bằng cách đó bạn sẽ luôn nhận được thông tin mới nhất.

5

Tôi đã xem qua trang web này trong đó có một vài gợi ý: http://blog.fredrikhaglund.se/blog/2008/02/23/get-control-over-your-assembly-dependencies/

Để có được một phiên bản cụ thể rõ ràng bạn phải chỉnh sửa web.config hoặc app.config?

"Cuối cùng, hãy xem tệp csproj của bạn bằng notepad (hoặc dỡ bỏ dự án trong Visual Studio để có thể mở dưới dạng văn bản). Khi bạn thêm tham chiếu bằng Visual Studio, bạn sẽ nhận được tham chiếu assembly với cả hai phiên bản số và khóa công khai và điều này có thể cung cấp cho bạn một số rắc rối khi bạn nâng cấp một phiên bản của nhà cung cấp lên phiên bản mới hơn. "
http://blog.fredrikhaglund.se/blog/2008/02/23/get-control-over-your-assembly-dependencies/

8

Có hai trường hợp ở đây - sử dụng tên mạnh/GAC hoặc không sử dụng tên mạnh.

Nếu bạn đang sử dụng tên mạnh và cài đặt các thành phần vào GAC, sau đó .Net sẽ muốn sử dụng phiên bản của thành phần mà ứng dụng khách đang tham chiếu khi được biên dịch. Vì vậy, trong ví dụ của bạn nó sẽ là khá có thể cho dự án để tham khảo cơ sở dữ liệu V2, trong khi Logging tham chiếu cơ sở dữ liệu V1, bởi vì các DLL có thể được lưu trữ song song trong GAC. Vì vậy, nếu bạn thực sự muốn Ghi nhật ký để sử dụng V2 thay vì V1, bạn sẽ cần sửa đổi tệp cấu hình để nói rằng "tham chiếu đến V1 phải được trỏ tới V2". Có nhiều nơi khác nhau để thực hiện việc này - tệp ứng dụng, tệp máy, v.v.

Nếu bạn không sử dụng tên mạnh thì đó.Theo mặc định, Net sẽ sử dụng phiên bản của DLL nằm trong cùng thư mục với máy khách. Giả sử bạn triển khai Project, CommonControls và Logging trong cùng thư mục với cơ sở dữ liệu V2. Sau đó, ngay cả khi Đăng nhập được xây dựng dựa trên cơ sở dữ liệu V1, nó sẽ cố gắng sử dụng thành phần trong cùng một thư mục, tức là cơ sở dữ liệu V2. Miễn là V2 có thể cung cấp cùng các lớp và phương thức công khai mà Logging muốn sử dụng, nó sẽ hoạt động tốt.

Trong môi trường của tôi - nơi tất cả các ứng dụng của chúng tôi là nội bộ - chúng tôi không sử dụng GAC. Chúng tôi chỉ triển khai tất cả các tệp mà ứng dụng cần vào một thư mục duy nhất. Khi bạn có rất nhiều thành phần phổ biến, nó sẽ chỉ là một cơn ác mộng để giữ cho các tập tin cấu hình trong đồng bộ.

Đây là tất cả rất khác với COM, trong đó tất cả các ứng dụng đã chọn bản sao hiện đang được đăng ký của DLL (giả sử V1 và V2 tương thích nhị phân).

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