Перегрузка до Type.GetType принимает функцию, которая может использоваться для разрешения AssemblyName в сборке. Возвращение null обычно вызывает исключение, так как тип не может быть разрешен, но это можно подавить, передав false в параметр throwOnError.
Функция, используемая для разрешения, может также установить строковую переменную во внешней области видимости, которую вернет исходный код.
using System;
using System.Diagnostics;
using System.Reflection;
namespace ConsoleApp {
public static class Program {
public static void Main() {
var assemblyName = GetAssemblyName("MyNamespace.MyClass, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
Debug.Assert(assemblyName == "MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
}
public static String GetAssemblyName(String typeName) {
String assemblyName = null;
Func<AssemblyName, Assembly> assemblyResolver = name => {
assemblyName = name.FullName;
return null;
};
var type = Type.GetType(typeName, assemblyResolver, null, false);
if (type != null)
return type.AssemblyQualifiedName;
return assemblyName;
}
}
}