ReflectionTypeLoadException загрузка .Net 4.0 Сборка из приложения .Net 4.0, в то время как 2.0 работает - PullRequest
1 голос
/ 27 октября 2011

У меня есть 32-битное (x86) настольное приложение .NET 4.0 со следующими файлами, одним из которых является устаревшая неуправляемая библиотека, вызываемая из библиотеки оболочек, написанной в управляемом приложении c ++.

  1. .exe (C #, .net 4)
  2. Library.dll (C #, .net 4)
  3. UnmanagedWrapper.dll (управляемый c ++)
  4. Unmanaged.dll (c)

Файлы 1 и 2 созданы с помощью решения VS 2010.Эти флаги выглядят следующим образом:

Version   : v4.0.30319
CLR Header: 2.5
PE        : PE32
CorFlags  : 3
ILONLY    : 1
32BIT     : 1
Signed    : 0

Неуправляемая библиотека-обертка изначально создавалась с VS 2008, например:

Version   : v2.0.50727
CLR Header: 2.5
PE        : PE32
CorFlags  : 16
ILONLY    : 0
32BIT     : 0
Signed    : 0

В этой конфигурации она работала без проблем.Затем я перенес проект неуправляемой оболочки, который будет встроен в VS 2010, который по умолчанию назначает .NET 4:

Version   : v4.0.30319
CLR Header: 2.5
PE        : PE32
CorFlags  : 16
ILONLY    : 0
32BIT     : 0
Signed    : 0

В разделе кода внутри Library.dll я использую Assembly.GetExecutingAssembly().GetTypes() для поиска типов, реализующихопределенный интерфейс внутри библиотеки.Поскольку библиотека ссылается на неуправляемую оболочку, она будет загружена в этот момент.Запуская это на нескольких машинах (на всех машинах Win 7 Pro x64), я получаю различные результаты: на нескольких машинах выдается ReflectionTypeLoadException с жалобой на то, что UnmanagedWrapper.dll или одна из его зависимостей не могут быть загружены.

Отлично работает на других машинах.В чем может быть разница между машинами, на которых она работает, независимо от того, установлена ​​ли библиотека-обертка 2.0 или 4.0, и машинами, на которых она работает, только если обертка имеет 2.0?Единственная подсказка, которую я пока имею, это то, что машины с VS 2010, похоже, работают, тогда как машины с установкой только .NET (4.0.30319) увидят исключение.Что это должно сказать мне?

1 Ответ

1 голос
/ 27 октября 2011

В тех случаях, когда приложения не работают, когда установлена ​​Visual Studio, иногда решение заключается в том, что вам нужно установить Visual Studio Runtime.Попробуйте установить либо Распространяемый пакет Microsoft Visual C ++ 2008 (x86) , либо Распространяемый пакет Microsoft Visual C ++ 2010 (x86) и, если он работает, убедитесь, что он является частью вашей стратегии развертывания.

...