EDIT: я не упомянул одну важную информацию . - приложение, которое загружает мои сборки, фактически не находится в том же каталоге (как и другие dll) , После работы с журналом Fusion я заметил, что загрузка dll
ведет себя по-другому, чем я думал раньше. (Да, я должен первый RTFM, позор мне)Невозможно загрузить тип `A` с сборки` Not.Containing.Type.A`
C:\Test\appLoadingStuff.exe
C:\Lib\Acme.Application.dll
C:\Lib\Acme.Data.dll
- ...
.NET зондирует базу приложений (помимо GAC и прочее , где загружается приложение - C:\Test\
), и не заботятся о местоположении, в котором загружены dll
(другой каталог).
При использовании рамки .NET я обнаружил, что получаю ReflectionTypeLoadException
исключение:
System.TypeLoadException
Не удалось загрузить один или несколько запрошенных типов. Получите свойство LoaderExceptions для получения дополнительной информации.
Не удалось загрузить тип 'Acme.Data.Foo' из сборки 'Acme.Data.Dao, Version = 1.1.0.4, культура = нейтральной, PublicKeyToken = нуль'. ":" Acme.Data.Foo
у меня есть, для простоты, 3 сборки:
Acme.Application
моего основной узелAcme.Data
моих данных объектов (ссылка на 1-ом)Acme.Data.Dao
моего объективистский доступ к данным ts (ссылка на 1-й)
И есть еще одно приложение, которое фактически загружает мой основной сбор. Все файлы .dll
находятся в одном каталоге.
Как и следовало ожидать, тип Acme.Data.Foo
живет в сборе Acme.Data
. Несмотря на это, .NET пытается найти его в другой сборке Acme.Data.Dao
- что не получается, поскольку этого типа нет.
Я не могу понять, что делает .NET, который ищет этот конкретный тип в неправильной сборке. Исключение генерируется непосредственно при доступе типов по сборке:
System.Reflection.RuntimeAssembly assembly = Assembly.LoadFile("C:\Lib\Acme.Application.dll")
var types = assembly.GetTypes(); // -> explodes
Когда я попытался проверить ссылки сборки с помощью:
assembly.GetReferencedAssemblies()
я могу ясно видеть мой нужный узел в списке.
Нет перенаправления сборки (и насколько я знаю, это влияет только на версию). Версии сборок правильные.
Что еще я должен искать?
Есть ли более подробная информация в «LoaderExceptions», предложенная сообщением об исключении, или это то, что второе сообщение в сообщении? –
@MartinCostello да, это в основном то второе сообщение, которое имеет смысл только с половины (тип на самом деле не существует, но сборка, где тип ссылается, поэтому почему она ищет ее там) –
Может ли кто-нибудь удалить тег «Assembly»? Я нечаянно потратил впустую свое «редактирование» голосования на редактирование. –