我有一个带有以下文件的.NET 4.0 32位(x86)桌面应用程序,其中一个是从包装程序库中调用的传统非托管库在托管的c + +。ReflectionTypeLoadException从.Net 4.0应用程序加载.Net 4.0程序集,而2.0作品
- Application.exe(C#,.NET 4)
- Library.dll(C#,.NET 4)
- UnmanagedWrapper.dll(托管C++)
- Unmanaged.dll(c)中
文件1和2由VS 2010解决方案构建。对于这些corflags如下所示:
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
在这种配置中,它的工作没有问题。然后我迁移的非托管的包装项目将在2010年建成VS在默认情况下使.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)安装的机器会看到异常。那应该告诉我什么?
好的线索。应用程序可能包含VS2008 C++运行时,但不包含2010运行时。在开发机器上都可能安装,但这可以解释不同之处。我会快速检查... –
这是否奏效? – luqi
它比我想象的更为怪异,或者我不完全理解redists如何工作。在发生故障的机器上,它没有redist(在windows目录下)比2005更新。工作版本是用2008构建的,所以我不明白为什么它起作用?无论如何,这显然是我需要的提示,所以我只是将其标记为答案,谢谢。 –