Type.GetType (“namespace.abClassName”) возвращает null

Этот код:

Type.GetType("namespace.abClassName") 

возвращает null .

и у меня есть в использовании:

 using namespace.ab; 

Обновить:

Тип существует, он находится в другой библиотеке classов, и мне нужно получить его по имени строки.

16 Solutions collect form web for “Type.GetType (“namespace.abClassName”) возвращает null”

Type.GetType("namespace.qualified.TypeName") работает только тогда, когда тип найден в Type.GetType("namespace.qualified.TypeName") или в текущей исполняемой сборке.

Если ни одна из этих вещей не верна, вам потребуется имя, соответствующее сборке .

Вы также можете получить тип без имени сборки, но с именем dll, например:

 Type myClassType = Type.GetType("TypeName,DllName"); 

У меня была такая же ситуация, и это сработало для меня. Мне нужен объект типа «DataModel.QueueObject» и имел ссылку на «DataModel», поэтому я получил следующий тип:

 Type type = Type.GetType("DataModel.QueueObject,DataModel"); 

Вторая строка после запятой – это имя ссылки (имя dll).

попробуйте использовать этот метод

  public static Type GetType(string typeName) { var type = Type.GetType(typeName); if (type != null) return type; foreach (var a in AppDomain.CurrentDomain.GetAssemblies()) { type = a.GetType(typeName); if (type != null) return type; } return null ; } 
 Dictionary typeCache; ... public static bool TryFindType(string typeName, out Type t) { lock (typeCache) { if (!typeCache.TryGetValue(typeName, out t)) { foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies()) { t = a.GetType(typeName); if (t != null) break; } typeCache[typeName] = t; // perhaps null } } return t != null; } 

Если assembly является частью сборки приложения ASP.NET, вы можете использовать class BuildManager:

 using System.Web.Compilation ... BuildManager.GetType(typeName, false); 

Если это вложенный тип, вы можете забыть преобразовать a. к +

Несмотря на это, typeof( T).FullName скажет вам, что вы должны сказать

EDIT: BTW, которые используют (как я уверен, вы знаете), являются только директивами для компилятора во время компиляции и, таким образом, не могут повлиять на успех вызова API. (Если у вас были ссылки на проекты или сборки, которые потенциально могли иметь влияние – следовательно, информация не бесполезна, просто требуется фильтрация …)

если ваш class не находится в текущем состоянии, вы должны дать квалифицированное имя, и этот код показывает, как получить квалифицированное имя classа

 string qualifiedName = typeof(YourClass).AssemblyQualifiedName; 

а затем вы можете получить тип с квалифицированным именем

 Type elementType = Type.GetType(qualifiedName); 

Я открываю пользовательские элементы управления в зависимости от того, какой пользователь контролирует доступ пользователя к указанному в базе данных. Поэтому я использовал этот метод для получения TypeName …

 Dim strType As String = GetType(Namespace.ClassName).AssemblyQualifiedName.ToString Dim obj As UserControl = Activator.CreateInstance(Type.GetType(strType)) 

Итак, теперь можно использовать значение, возвращаемое в strType, для создания экземпляра этого объекта.

Если на сборку ссылаются и class видится:

 typeof(namespace.abClassName) 

GetType возвращает null, потому что тип не найден, с typeof, компилятор может помочь вам узнать об ошибке.

Попробуйте использовать полное имя типа, которое включает информацию о сборке, например:

 string typeName = @"MyCompany.MyApp.MyDomain.MyClass, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"; Type myClassType = Type.GetType(typeName); 

У меня была такая же ситуация, когда я использовал только имя namesspace.classname, чтобы получить тип classа в другой сборке, и это не сработает. Работал только тогда, когда я включил информацию о сборке в свою строку типа, как показано выше.

Когда у меня есть только имя classа, я использую это:

 Type obj = AppDomain.CurrentDomain.GetAssemblies().SelectMany(t => t.GetTypes()).Where(t => String.Equals(t.Name, _viewModelName, StringComparison.Ordinal)).First(); 

Убедитесь, что запятая находится непосредственно после полного имени

 typeof(namespace.abClassName, AssemblyName) 

Поскольку это не работает

 typeof(namespace.abClassName ,AssemblyName) 

Я был в тупике несколько дней на этом

Для меня это решение кажется лучшим для меня, но для меня это не сработало, поэтому я сделал это следующим образом:

 AssemblyName assemblyName = AssemblyName.GetAssemblyName(HttpContext.Current.Server.MapPath("~\\Bin\\AnotherAssembly.dll")); string typeAssemblyQualifiedName = string.Join(", ", "MyNamespace.MyType", assemblyName.FullName); Type myType = Type.GetType(typeAssemblyQualifiedName); 

Предпосылкой является то, что вы знаете путь сборки. В моем случае я знаю это, потому что это assembly, построенная из другого внутреннего проекта и включаемая в папку bin нашего проекта.

В случае, если это важно, я использую Visual Studio 2013, моя целевая .NET – 4.0. Это проект ASP.NET, поэтому я получаю абсолютный путь через HttpContext . Тем не менее, абсолютный путь не является требованием, как кажется из MSDN в AssemblyQualifiedNames

Для меня ключом «+» был ключ! Это мой class (это вложенный):

 namespace PortalServices { public class PortalManagement : WebService { public class Merchant {} } } 

и эта строка кода работала:

 Type type = Type.GetType("PortalServices.PortalManagement+Merchant"); 

Поскольку Type.GetType (String) нужно Type.AssemblyQualifiedName, вы должны использовать Assembly.CreateQualifiedName (String, String) .

 string typeName = "MyNamespace.MyClass"; // Type.FullName string assemblyName = "MyAssemblyName"; // MyAssembly.FullName or MyAssembly.GetName().Name string assemblyQualifiedName = Assembly.CreateQualifiedName(assemblyName , typeName); Type myClassType = Type.GetType(assemblyQualifiedName); 

Как assemblyName вам не нужно FullName, требуется только имя без Version, Culture и PublicKeyToken.

Я обманул. Поскольку типы, которые я хочу создать (по имени), все находятся во В dll, который я контролирую, я просто ставил статический метод в DLL в сборке, который принимает простое имя, и вызывает type.GetType из этого контекста и возвращает результат ,

Первоначальная цель состояла в том, чтобы тип мог быть указан по имени в данных конфигурации. С тех пор я изменил код, чтобы пользователь указал формат для обработки. Классы обработчика формата реализуют интерфейс, который определяет, может ли тип анализировать указанный формат. Затем я использую reflection, чтобы найти типы, реализующие интерфейс, и найти тот, который обрабатывает формат. Итак, теперь в конфигурации указано имя формата, а не определенный тип. Код отражения может смотреть на соседние DLL и загружать их, поэтому у меня есть своя архитектура для недобросовестных пользователей.

  • Вызов методов с необязательными параметрами посредством отражения
  • Обнаружить, если метод был переопределен с помощью Reflection (C #)
  • Какая польза для тегов в Go?
  • Быстрое создание объектов вместо Activator.CreateInstance (type)
  • c # экземпляр classа из строки
  • Вывод типа отражения на Java 8 Lambdas
  • Как я могу получить все classы в пространстве имен?
  • Почему C ++ не имеет отражения?
  • Использовать reflection для вызова переопределенного базового метода
  • Создание экземпляра с использованием имени classа и вызывающего конструктора
  • Gson TypeToken с динамическим типом ArrayList
  • Interesting Posts

    Обмен ссылкой на WhatsApp с мобильного сайта (а не приложения) для Android

    SwingWorker не отвечает

    Установка Windows Vista без восстановления системы CD с OEM-ключом (то есть: с нижней стороны моего ноутбука)

    Depmod замерзает после сбоя установки bcwml-kernel-source

    Импорт текстового файла с ведущими 0 в excel

    Может ли беспроводная клавиатура работать с Wi-Fi ноутбука, а не вставлять свой собственный USB-накопитель?

    Как мы можем восстановить ppc / ppc64, а также полную поддержку SDK 10.4 / 10.5 для Xcode 4?

    ? (nullable) в C #

    Невозможно получить информацию о подписке из API разработчика Google Play для Android

    Как получить переменные данные из classа

    Отправить встроенное изображение по электронной почте

    Поддерживает ли Java внутренние / локальные / вспомогательные методы?

    Рекомендуемые гигабитные маршрутизаторы 802.11n, работающие с DD-WRT

    Как сгладить вложенные объекты с выражением linq

    Проблема с поплавками в Objective-C

    Давайте будем гением компьютера.