Типа от mscorlib не найдено - PullRequest
1 голос
/ 09 августа 2010

Я кое-что не могу понять.Я не могу прочитать ссылку на тип:

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 ]

3 голосов
/ 09 августа 2010

Причина, по которой ваша последняя строка не будет компилироваться, заключается в том, что 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 голос
/ 09 августа 2010

System.Deployment.Internal.Isolation - это пространство имен, а не тип, вы не можете получить «ссылку» на пространство имен, это просто часть полного имени класса.

...