C# 了解平台目标
我在使用WPF应用程序中的非托管程序集时遇到问题。以下是我的设置,归结为一个简单的草图:C# 了解平台目标,c#,visual-studio-2010,x86,64-bit,platform,C#,Visual Studio 2010,X86,64 Bit,Platform,我在使用WPF应用程序中的非托管程序集时遇到问题。以下是我的设置,归结为一个简单的草图: X64 RUNTIME____________________ | | | AS_EXEC (executing Assy, x86)| | | | | | | | AS_INT (interfaces, AnyCpu)| | |
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)|
|______________________________|
我想做的是测试,就像\u WRA\u 1
-
<> L> >p>自从代码> asyWRAI1引用了将在<代码> x86 中工作的非托管代码,我认为最好把这个项目设置为<代码> x86 < /COD>本身-只是为了防止使用会导致<代码> BaDimaGrase< /Calp>异常。p>
包含所有AS_INT
实现的接口,并设置为AS_WRA
任何CPU
- 我处于64位运行时,所以我还将
到设置为\u EXEC
X86
只能使用64位,AS_WRA_2
32位(这意味着基本上我不能同时运行它们,但因为我只想测试AS__3
,我或多或少很高兴忽略了这一点-欢迎回来,DLL地狱!)AS_WRA_1
- 我可以从
创建实例作为\u WRA\u 2
- 我得到了
和AS_WRA_1
的BadImageFormatExceptionAS_WRA_3
这与我的预期正好相反……我做错了什么?如果您有一个使用x86(Assy)编译的可执行文件,它将始终在x86中运行,并且它的所有依赖项都必须在x86或任何CPU中(它们也将在x86中执行)
您不能有同时在x86和x64中执行非托管资源的可执行文件,因此您将无法从Assy访问AS UNM_1和AS UNM_2,因为Assy UNM_2是x64,Assy是x86。Assy调用As_INT时,它也会变成x86。我猜您的As_INT将是x64,因为您在x64机器上(可能使用了底层操作系统平台),这可能会导致BadImageException。我也遇到过几次这样的情况,必须将平台显式设置以使其正常工作。设置它,但结果更令人困惑:我的应用程序甚至不会启动并失败,因为
AS\u INT
会出现BadImageFormatExceptionAS_INT
没有外部引用,只有几个接口。根据,我的应用程序以64位进程启动,尽管我将其设置为编译为X86
。我的错误:在configuration Manager中,AS_EXEC
被设置为X86
,但在项目设置中,它仍然被设置为目标任何CPU
。哎呀。