Ứng dụng của tôi chứa tham chiếu đến thư viện bên ngoài (đối tượng quản lý máy chủ SQL). Rõ ràng, nếu thư viện không có mặt trên hệ thống thời gian chạy, ứng dụng vẫn hoạt động miễn là không có phương thức nào được gọi là sử dụng các lớp từ thư viện này.Làm cách nào để phát hiện tham chiếu .NET thiếu trong thời gian chạy?
Câu hỏi 1: Hành vi được chỉ định này hay chỉ là tác dụng phụ (may mắn) của cách CLR tải thư viện?
Để phát hiện xem các tài liệu tham khảo có thể truy cập, tôi hiện đang sử dụng mã như thế này:
Function IsLibraryAvailable() As Boolean
Try
TestMethod()
Catch ex As FileNotFoundException
Return False
End Try
Return True
End Function
Sub TestMethod()
Dim srv As New Smo.Server() ' Try to create an object in the library
End Sub
Nó hoạt động, nhưng nó có vẻ là khá xấu xí. Lưu ý rằng nó chỉ hoạt động nếu TestMethod là một phương thức riêng biệt, nếu không ngoại lệ sẽ được ném tại số bắt đầu của IsLibraryAvailable
(trước khi thử, ngay cả khi đối tượng khởi tạo xảy ra trong khối try-catch).
Câu hỏi 2: Có phương án nào tốt hơn không?
Đặc biệt, tôi e rằng các tối ưu hóa như nội tuyến chức năng có thể khiến mã của tôi không hoạt động.
Những thứ kích hoạt biên dịch động (và những thứ tương tự) có thể khiến mã dường như không liên quan đến thất bại khi không có thư viện. Ví dụ, serialization/deserialization, tính năng ASP.NET Profile đã thất bại đối với tôi khi một hội đồng tham chiếu dường như không liên quan bị thiếu. Nó tạo ra rất, rất khó để gỡ lỗi các vấn đề. – MatthewMartin
@MatthewMartin: Cảm ơn, đó là điều tốt để biết. – Heinzi