Разрешить тип из имени класса в другой сборке


у меня есть метод, где мне нужно решить тип класса. Этот класс существует в другой сборке с пространством имен, как:

MyProject.Domain.Model

Я пытаюсь выполнить следующее:

Type.GetType("MyProject.Domain.Model." + myClassName);

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

Я уверен, что есть гораздо лучший способ выполните эту задачу, но у меня не было большого опыта разрешения сборок и обхода пространств имен внутри, чтобы решить тип класса, который я ищу. Любые советы или рекомендации, чтобы выполнить эту задачу более изящно?

4 61

4 ответа:

вам нужно будет добавить имя сборки следующим образом:

Type.GetType("MyProject.Domain.Model." + myClassName + ", AssemblyName");

чтобы избежать двусмысленности или если сборка находится в GAC, необходимо указать полное имя сборки, например:

Type.GetType("System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");

короткий и динамический подход с использованием AssemblyQualifiedName собственность -

Type.GetType(Type.GetType("MyProject.Domain.Model." + myClassName).AssemblyQualifiedName)

наслаждайтесь!

вы можете использовать любой из стандартных способов?

typeof( MyClass );

MyClass c = new MyClass();
c.GetType();

если нет, то вам придется добавить информацию к типу.GetType о сборке.

сначала загрузите сборку, а затем тип. бывший: Сборка DLL = сборка.LoadFile (путь); файл DLL.GetType(typeName);