Tôi đang cố gắng định vị một kiểu khi chạy từ một danh sách các assembly; mã của tôi là một cái gì đó như thế này:Tại sao Type.GetType() làm việc và Assembly.GetType() không hoạt động?
foreach (Assembly assembly in assembliesToSearch)
{
Type t = assembly.GetType(assemblyName);
if (t != null)
{
return t;
}
}
, và vấn đề mà tôi có là t luôn luôn là null. Chơi đùa với các trình gỡ lỗi và cửa sổ Intermediate trong VS2010, tôi nhận thấy sau khi tôi đặt một breakpoint bên trong vòng lặp:
Type.GetType(typeof(MyNamespace.MyClass).AssemblyQualifiedName)
hoạt động OK, nhưng
assembly.GetType(typeof(MyNamespace.MyClass).AssemblyQualifiedName)
không (khi lắp ráp là lắp ráp mà tôi biết có chứa các lớp học tôi đang tìm kiếm - trong trình gỡ lỗi, tôi có thể đặt một chiếc đồng hồ trên assembly.GetTypes(), duyệt đến lớp tôi đang cố gắng để nhanh chóng, và gọi assembly.GetType ("MyNamespace.MyClass , MyNamespace ")).
Có ai biết tại sao tìm kiếm tất cả các assembly bằng cách sử dụng Type.GetType() hoạt động, nhưng tìm kiếm assembly mà tôi biết có chứa kiểu assembly.GetType() không?
Cảm ơn bạn đã phản hồi; mẫu mã ban đầu của tôi không hiển thị rõ ràng, nhưng bên trong vòng lặp của tôi, nơi tôi đang gọi Type t = assembly.GetType (assemblyName), assemblyName là "MyNamespace.MyClass, MyAssembly", do đó, theo tính toán của tôi, nó phải được trả lại Loại mong đợi. –
@David: 'MyNamespace.MyClass, MyAssembly' vẫn là tên loại đủ điều kiện lắp ráp. Bạn cần phải bỏ tên assembly từ chuỗi đó để nó hoạt động với 'Assembly.GetType()'. – adrianbanks
@adrianbanks - nơi bạn đã học "Type.GetType() rất có thể sẽ sử dụng các tham chiếu của assembly hiện tại để giải quyết kiểu" - nó dường như không nằm trong [MSDN here] (http: // msdn .microsoft.com/vi-us/library/w3f99sx1 (v = vs.110) .aspx). Ngoài ra, "hội đồng hiện tại" là gì? Trong trường hợp tôi đang xem xét, lắp ráp với loại - được tìm thấy! - không phải là lắp ráp với phương pháp hiện đang được thực hiện và không phải là một tham chiếu của nó ... nhưng nó _is_ một hội đồng trên ngăn xếp cuộc gọi.(Lý do cho câu hỏi của tôi: Phiên bản trong tên lắp ráp của tôi là sai nhưng loại được tìm thấy.) – davidbak