我无法理解。我无法读取类型参考:
Assembly mscorlib = Assembly.Load("mscorlib");
// it DOES exist, returns type reference:
mscorlib.GetType("System.Deployment.Internal.Isolation.IDefinitionAppId");
// but its parent scope doesn't exist.. returns null:
mscorlib.GetType("System.Deployment.Internal.Isolation");
// even though it exists, it doesn't compile
// System.Deployment.Internal.Isolation.IDefinitionAppId x;
这怎么可能?
答案 0 :(得分:3)
您的上一行无法编译的原因是因为IDefinitionAppId
内部 - 不是因为System.Deployment.Internal.Isolation
是一种类型。
请注意,如果Isolation
是类型的名称,则必须使用GetType("System.Deployment.Internal.Isolation+IDefinitionAppId")
(注意+),因为嵌套类型在CLR名称中的表示方式。
证明这一点非常简单:
using System;
using System.Reflection;
public class Test
{
static void Main()
{
Assembly mscorlib = typeof(string).Assembly;
string name = "System.Deployment.Internal.Isolation.IDefinitionAppId";
Type type = mscorlib.GetType(name);
// Prints System.Deployment.Internal.Isolation
Console.WriteLine(type.Namespace);
}
}
所以System.Deployment.Internal.Isolation
是一个命名空间,而不是一个类型,因此Assembly.GetType(...)
没有找到它作为一个类型。
答案 1 :(得分:1)
System.Deployment.Internal.Isolation是一个命名空间,而不是一个类型,你不能获得命名空间的“引用”,它只是完整类名的一部分。