Tôi đang cố gắng quét một assembly để tìm các kiểu triển khai giao diện cụ thể bằng cách sử dụng mã tương tự như sau:
public List<Type> FindTypesImplementing<T>(string assemblyPath)
{
var matchingTypes = new List<Type>();
var asm = Assembly.LoadFrom(assemblyPath);
foreach (var t in asm.GetTypes())
{
if (typeof(T).IsAssignableFrom(t))
matchingTypes.Add(t);
}
return matchingTypes;
}
Vấn đề của tôi là, tôi nhận được một ReflectionTypeLoadException
khi gọi asm.GetTypes()
trong một số trường hợp, ví dụ: nếu hợp ngữ chứa các kiểu tham chiếu đến một hợp ngữ hiện không khả dụng.
Trong trường hợp của tôi, tôi không quan tâm đến các loại gây ra sự cố. Các loại tôi đang tìm kiếm không cần các cụm không có sẵn.
Câu hỏi đặt ra là: có thể bằng cách nào đó bỏ qua / bỏ qua các kiểu gây ra ngoại lệ nhưng vẫn xử lý các kiểu khác có trong assembly không?
AppDomain.CurrentDomain.GetAssemblies()
, điều này hoạt động trên máy của tôi nhưng không hoạt động trên máy khác. Tại sao một số tổ hợp từ tệp thực thi của tôi không thể đọc / tải được ??