我在使用WPF应用程序时遇到了处理未管理的程序集的问题。这是我的设置,简化成一个简单的草图:
X64 RUNTIME____________________
| |
| AS_EXEC (executing Assy, x86)|
| | |
| | |
| AS_INT (interfaces, AnyCpu)|
| | |
| | |
| AS_WRA_1 (wrapper, x86) |
| | | |
| | AS_UNM_1 (unmanaged, x86)|
| | |
| AS_WRA_2 (wrapper, x64) |
| | | |
| | AS_UNM_2 (unmanaged, x64)|
| | |
| AS_WRA_3 (wrapper, x86) |
| | |
| AS_UNM_3 (unmanaged, x86)|
|______________________________|
我想要做的是测试
AS_WRA_1
。由于
AS_WRA_1
引用的非托管代码仅在X86
下工作,因此我认为最好将该项目设置为X86
本身 - 只是为了防止使用会导致BadImageFormat
异常的方法。
AS_INT
包含所有AS_WRA
实现的接口,并设置为ANY CPU
。我在64位运行时中,所以我也将
AS_EXEC
设置为X86
。
AS_WRA_2
只能在64位下工作,AS_WRA_3
只能在32位下工作(这基本上意味着我不能同时运行它们,但由于我只想测试AS_WRA_1
,所以我忽略了这一点)。在运行时,我使用反射从用户在UI中选择的包装器创建一个实例。奇怪的是,结果如下:
我可以从
AS_WRA_2
创建实例对于
AS_WRA_1
和AS_WRA_3
,我得到了BadImageFormatExceptions
。这正好与我的预期相反...我在这里做错了什么?
AS_INT
处失败,出现了一个BadImageFormatException异常。AS_INT
没有外部引用,只有几个接口。 - Sebastian EdelmeierAS_EXEC
被设置为X86
,但在项目设置中仍然设置为目标ANY CPU
。糟糕。 - Sebastian Edelmeier