Я знаю, что это может выглядеть как дубликат вопроса, но я не нашел ни одного, который бы указывал на эту конкретную c ситуацию. Я использую AssemblyQualifiedName и знаю, что сборка загружена в AppDomain.
Этот код возвращает ноль:
var type = Type.GetType(TypeName);
Этот код возвращает тип:
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
var names = TypeName.Split(new[] { ',' }, 2).AsQueryable();
var type = assemblies.Single(x => x.FullName == names.Last().Trim()).GetType(names.First());
The typeName
переменная AssemblyQualifiedName Значение: "testTransform, transform, Version = 0.0.0.0, Culture = нейтральный, PublicKeyToken = null"
EDIT 06 Февраль 2020
Я нашел это: https://support.microsoft.com/en-au/help/556041, в котором говорится:
Если сборки не имеют подписи со строгим именем, для загрузки используются только имена файлов.
И этот: https://docs.microsoft.com/en-us/dotnet/standard/data/xml/xslt-compiler-xsltc-exe?redirectedfrom=MSDN, в котором говорится:
Вы не можете создавать подписанные сборки с помощью xslt c .exe.
Может ли Type.GetType () не работать с неподписанными сборками?
РЕДАКТИРОВАТЬ 12 февраля 2020 г.
Я подписал сборку, и поведение не изменилось.
РЕДАКТИРОВАТЬ 13 февраля 2020 г.
Весь код слишком велик, чтобы в него можно было вписаться. Суть в том, что есть родительское программное обеспечение, которое можно настроить для запуска сторонних сборок. Он создает новый AppDoamin для запуска сборки. Мой код - сторонняя сборка, работающая внутри этого приложения. TypeName просто определяется как параметр, принимающий значения из окна конфигурации:
[DisplayName("Type Name"),
Category("Transform"),
Description("Qualified Name For XSL Transform Type."),
ListBoxItemProvider(typeof(TypeListGenerator), nameof(RootDirectory), nameof(AssemblyFile)),
Editor(typeof(ListBoxEditor), typeof(UITypeEditor))]
public string TypeName { get; set; }