从找不到mscorlib的类型

时间:2010-08-09 18:53:35

标签: c# reflection mscorlib

我无法理解。我无法读取类型参考:

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;

这怎么可能?

2 个答案:

答案 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是一个命名空间,而不是一个类型,你不能获得命名空间的“引用”,它只是完整类名的一部分。