Tôi có thư viện của bên thứ ba yêu cầu lắp ráp A khi tôi gọi vào mã của họ. Hội đồng đó thường được cài đặt trong GAC, vì vậy tôi có một số tùy chọn để tải nó:Tôi nên bắt buộc tải một assembly được tham chiếu như thế nào?
- Tôi có thể gọi rõ ràng
Assembly.Load()
. Tuy nhiên, yêu cầu tên đầy đủ mà tôi không cảm thấy thoải mái với mã cứng trong chương trình của tôi. - Tôi có thể gọi một cách rõ ràng
Assembly.LoadWithPartialName()
. Đó là một API lỗi thời, tất nhiên tôi không cảm thấy thoải mái khi mất quyền kiểm soát trong phiên bản. - Tôi có thể tham khảo bản lắp ráp trong tệp dự án Visual Studio của mình, vì vậy tôi luôn nhận được phiên bản mà tôi đã tạo. Tuy nhiên, điều đó sẽ không hoạt động trừ khi tôi tạo một đối tượng giả trong assembly đó. Trình biên dịch C# chỉ đơn giản là bỏ qua nó nếu tôi không.
- Cùng một vấn đề nếu tôi gọi
Assembly.GetReferencedAssemblies
và buộc tải kết quả phù hợp. Trình biên dịch C# đơn giản sẽ không tham chiếu đến assembly của tôi ngay cả khi tôi đặt nó trong danh sách tham khảo.
Bây giờ những gì tôi đang làm là gọi typeof(A.Foo).Assembly.GetName()
và bỏ qua giá trị trả lại. Có cách nào tốt hơn để làm điều đó không?
Làm thế nào về tùy chọn # 1 nhưng đặt tên đầy đủ hội trong app.config (hoặc cấu hình tương tự khác tập tin)? Bằng cách đó bạn có được tốt nhất của cả hai thế giới: - một tải trọng rõ ràng của hội đồng bạn muốn, nhưng sự linh hoạt để cập nhật mà không cần biên dịch lại, bạn cần phải – dkackman
@dkackman - đó là điều tôi cần cập nhật theo cách thủ công. Tôi muốn Visual Studio để nhận phiên bản hiện tại từ điều khiển phiên bản, vì vậy tôi nhận được phiên bản tại thời gian xây dựng, thay vì mã hóa thời gian hoặc thời gian chạy. –
@focey - hmmm, có mùi tanh nhưng ... sau khi xây dựng? có được lắp ráp, phiên bản ferret ra, ghi vào tập tin cấu hình? Có lẽ tốt nhất để chỉ tiếp tục làm những gì bạn đang làm mặc dù tôi không thích điều đó hoặc là – dkackman