Type.GetType («NameSpace.ClassName», false, true) возвращает ноль. Что может быть не так? - PullRequest
0 голосов
/ 17 апреля 2010

Я пытаюсь создать экземпляр класса, используя отражение на веб-сайте ASP.net. Класс ClassName определен и находится в папке App_code. Следующая строка возвращает ноль, что может быть не так.

Type type = Type.GetType("NameSpace.ClassName", false, true);

Ответы [ 6 ]

8 голосов
/ 17 апреля 2010

Поставка только имени типа работает только в следующих сценариях:

  • Тип, о котором идет речь, находится в текущей выполняемой сборке (то есть той же сборке, что и ваш код)

OR

  • Тип вопроса: mscorlib.dll.

Во всех остальных случаях вы должны указать имя с указанием сборки типа. Это то, что позволяет ему найти соответствующую сборку и загрузить ее.

4 голосов
/ 11 декабря 2012

Вы можете использовать System.Web.Compilation.BuildManager.GetType, например.

using System.Web.Compilation;

Type t = BuildManager.GetType("NameSpace.ClassName", true);
2 голосов
/ 17 апреля 2010

Афин, попробуй это. Это сделано для того, чтобы проконтролировать ответ Адама Робинсона и продемонстрировать, что вам нужно сделать, чтобы проверить утверждения, сделанные в ответе, и комментарии для себя.

Type t = typeof(YourNamespace.YourClass);
string assemblyQualifiedName = t.AssemblyQualifiedName;
Type type = Type.GetType(assemblyQualifiedName, false, true);
// type will not be null

Полное имя сборки будет выглядеть примерно так: «Sample.Foo, App_Code.qwijwhsy, Version = 0.0.0.0, Culture = нейтральный, PublicKeyToken = null».

0 голосов
/ 14 июля 2010

, если в App_Code попробуйте

Type t = Type.Get("Namespace.ClassName, __code");
0 голосов
/ 17 апреля 2010

Очень простой код. Я думаю, что это не нуждается в объяснении.

using System.Reflection;

Assembly assembly = Assembly.LoadFrom("MyLibrary.dll");
Type type = assembly.GetType("NameSpace.ClassName", false, true);
0 голосов
/ 17 апреля 2010

Попробуйте использовать Assembly.GetType (), которая должна выглядеть в указанной сборке. Конечно, вам нужно загрузить соответствующий класс Assembly, который будет GetCallingAssembly (), если тип совместно использует сборку с исполняемым кодом, или что-то еще, в этом случае вы будете использовать один из статических методов LoadSomething () в классе сборки.

Например:

Type type = LoadFrom("App_code\ClassAssembly.dll").GetType("Namespace.ClassName");
// Load assembly, then type!
Type type2 = GetCallingAssembly().GetType("Namespace.ClassName");
// If it's the same assembly as the calling code.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...