C# Type.GetType (string typeName) возвращает ноль - PullRequest
0 голосов
/ 15 января 2020

Я знаю, что это может выглядеть как дубликат вопроса, но я не нашел ни одного, который бы указывал на эту конкретную 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" enter image description here

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; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...