Почему собрание.GetType () не находит мой класс?

выдержка из кода:

var a = Assembly.LoadFile("MyAssembly.dll");
var t = a.GetType("MyNamespace.MyClass", false);
Debug.Assert(t != null); // fails

Assembly.LoadFile() загрузка сборка без каких-либо проблем, но Assembly.GetType() возвращает null, хотя я проверил это MyNamespace.MyClass присутствует и правильно.

есть другие идеи, почему это происходит?

3 ответов


в строке

var t = a.GetType("MyNamespace.MyClass", false);

установите это логическое значение в true таким образом, вы получаете исключение, которое может объяснить проблему. Для различных проблемных ситуаций вы получаете отдельные исключения, см. MSDN или новый docs.


фактическая основная проблема заключалась в том, что MyAssembly.dll имеет другую зависимость от OtherAssembly.dll. Как только я включу ссылку на OtherAssembly.dll в вызывающей сборке, все отлично работает.


// Retrieve all classes that are typeof SomeClassOrInterface

List<Type> myTypes = assembly.GetTypes().Where(typeof(SomeClassOrInterface).IsAssignableFrom).ToList();

// Loop thru them or just use Active.CreateInstance() of the type you need

myTypes.ForEach(myType => {
    SomeClassOrInterface instance = Activator.CreateInstance(myType) as SomeClassOrInterface;                           
});

этот пример кода работает под .NET 4