(новый объект [xxx]). GetType () начинает возвращать объект другого типа после загрузки CustomMarshalers.dll в память.
Возвращает объект Type, который ссылается на ту же запись метаданных в mscorlib.dll, но имеет поле Type.Guid, заполненное значением {9fa4230f-db51-34dd-b578-9c072c062046}.
Это нарушает любой код, который проверяет тип переменной, используя следующий синтаксис «variable.GetType () == typeof (object [])». В результате он разбивает двоичный десериализатор внутри mscorlib.dll. Это, в свою очередь, нарушает проверку лицензии в WinForms. Это в свою очередь нарушает все приложение.
Справка:
У меня есть неуправляемое настольное приложение, которое загружает и выполняет набор объектов .NET, которые реализуют предопределенный интерфейс COM. Приложение запускается как обычная неуправляемая программа. Затем он обнаруживает список COM-объектов, которые ему необходимо загрузить, загружает их и выполняет предопределенный контракт. Некоторые из этих COM-объектов реализованы в .NET.
.NET-код работает нормально, пока CustomMarshalers.dll не будет загружен в память. .NET код начинает сбой во всех местах после загрузки CustomMarshalers.dll в память.
CustomMarshalers.dll загружается, потому что приложение выполняет сценарий VB6 с использованием vbscript.dll (это отдельное действие из тех модулей, которые загружаются во время запуска). Сценарий использует COM-объект на основе .NET, который возвращает некоторое значение сценарию. Я думаю, что .NET загружает CustomMarshalers.dll в память, чтобы упорядочить эти значения.
Дополнительная информация:
Свойства AssemblyQualifiedName, ContainsGenericParameters, FullName, Namespace, генерируют исключение NullReference, если любое из них вызывается для объекта Type, полученного с использованием (новый объект [xxx]). GetType (). Все остальное, кроме свойства Guid, одинаково для обоих объектов Type.