Мне нужно создать тип только из его полного имени, например: "System.String" или "Tuple'2 [string, Mytype]".
в строке нет информации о сборке.
Вот как выглядит код.
private static Type LoadType(string typeName)
{
// try loading the type
Type type = Type.GetType(typeName, false);
if (type != null)
return type;
// if the loading was not successfull iterate all the referenced assemblies and try to load the type.
Assembly asm = Assembly.GetEntryAssembly();
AssemblyName[] referencedAssemblies = asm.GetReferencedAssemblies();
foreach (AssemblyName referencedAssemblyName in referencedAssemblies)
{
type = referencedAssembly.GetType(typeName, false);
if (type != null)
return type;
}
throw new TypeLoadException(string.Format("Could not load the Type '{0}'",typeName));
}
этот метод работает, когда тип не является универсальным. Но для универсальных типов повторение сборок всегда завершается неудачей, потому что ни одна сборка не содержит всех определений, необходимых для построения типа.
Есть ли способ предоставить несколько сборок для разрешения типов при вызове GetTypes?