Почему я получаю разные результаты в .NET4 по сравнению с .NET 3.5 - PullRequest
2 голосов
/ 18 февраля 2011

Когда для целевого фреймворка моего проекта установлено значение Framework 4.0 и выполняется следующий код:

 Assembly pAsm = Assembly.LoadFrom(aMagPath);
 foreach (Module m in pAsm.GetModules())
 {
    Type t = m.GetType("typeName"));
 }

typeName является определяемым пользователем типом из сторонней библиотеки dll.

t равно нулю.

Если я изменю тип цели на Framework 3.5 t, он не будет нулевым.

Я больше ничего не меняю. Я просто изменяю целевой фреймворк и перезапускаю приложение.

Может кто-нибудь объяснить, почему это происходит? Есть ли какой-нибудь инструмент, который позволит мне больше в этом разобраться?

UPDATE: Я изменил свой код на следующий.

Assembly pAsm = Assembly.LoadFrom(aMagPath);
Type t = pAsm.GetType(String.Format("GM.FCAT.{0}.{0}+FBlock+{1}Function+{2}CaseStream+{2}RepeatableParameterStream", FBlockName, pName, aParam.Name), false);

У меня все та же проблема. t = null в версии 4.0 и не в версии 3.5

Не удается найти тип при загрузке в отражатель .net. так что, думаю, его там нет.

1 Ответ

1 голос
/ 18 февраля 2011

Некоторые типы каркасов перемещались между сборками между версиями, с перенаправлением привязки сборки, чтобы сделать его обычно невидимым для клиентов. Это может объяснить, что происходит, но трудно сказать, не зная, какую сборку и тип вы пытаетесь найти.

РЕДАКТИРОВАТЬ: Хорошо, теперь у нас есть немного больше контекста ...

Это говорит о том, что тип действительно отсутствует в этом модуле ... Возможно, в .NET 3.5 была ошибка, которая искала в родительской сборке имя типа, а не только внутри модуля.

Есть ли какая-то причина, по которой у есть , чтобы искать по модульному принципу, вместо того, чтобы просто запрашивать тип самой сборки?

...