Reflection C#. Типы данных в сборках запущеного проекта. Как получить тип (Type) по названию (string)
Для того, чтобы узнать какие типы данных загружены в данный момент в приложении, можно использовать такой вариант.
Исходные данные - файл с названием некоторого класа и именем сборки, где класс находиться, например:
assamblyList.txt:
MyAplicationDll.Class1, MyAplicationDll
MyAplication2Dll.Class1, MyAplication2Dll
где первая часть - полное имя некоторого класса, который точно присутствует в сборке, а вторая - имя сборки.
Для парсинга сборок - используем приведенную дальше функцию:
static Assembly[] assemblies;
static void ParseAssemblyList()
{
List
StreamReader reader = new StreamReader("assamblyList.txt");
string path = null;
while((path = reader.ReadLine()) != null)
{
if(path != string.Empty)
{
typeNames.Add(path);
}
}
if (typeNames.Count > 0)
{
assemblies = new Assembly[typeNames.Count];
for(int i = 0; i < assemblies.Length; i++)
{
assemblies [ i ] = Type.GetType(typeNames[ i ], true).Assembly;
}
}
}
Имея данные о сборках, можно искать в них уже нужные типы данных.
public static Type GetType(string typeName)
{
Type type = null;
for(int i = 0; i < assemblies.Length; i++)
{
type = assemblies[ i ].GetType(typeName);
if(type != null)
{
break;
}
}
if(null == type)
{
type = Type.GetType(typeName, false); //на случай, когда запрашиваеться системный тип, например "System.Boolean"
}
return type;
}
Указав сбоки, доступные для парсинга, вы сможете получить доступ таким методом ко всем типам данных внутри этих сборок.