为什么Assembly.GetType()找不到我的类?

时间:2011-09-19 07:51:14

标签: c# reflection

代码摘录:

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 个答案:

答案 0 :(得分:10)

在第

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

将该布尔值设置为true,以便获得可以解释问题的异常。对于各种问题情况,您会收到单独的例外情况,请参阅MSDN或新的docs

答案 1 :(得分:5)

实际的潜在问题是MyAssembly.dllOtherAssembly.dll有另一种依赖关系。一旦我在调用程序集中包含对OtherAssembly.dll的引用,一切正常。

答案 2 :(得分:0)

// 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