Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 了解平台目标_C#_Visual Studio 2010_X86_64 Bit_Platform - Fatal编程技术网

C# 了解平台目标

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)| | |

我在使用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)|
|______________________________|
我想做的是测试
,就像\u WRA\u 1

    <> L> >p>自从代码> asyWRAI1引用了将在<代码> x86 中工作的非托管代码,我认为最好把这个项目设置为<代码> x86 < /COD>本身-只是为了防止使用会导致<代码> BaDimaGrase< /Calp>异常。p>
  • AS_INT
    包含所有
    AS_WRA
    实现的接口,并设置为
    任何CPU

  • 我处于64位运行时,所以我还将
    设置为\u EXEC
    X86

  • AS_WRA_2
    只能使用64位,
    AS__3
    32位(这意味着基本上我不能同时运行它们,但因为我只想测试
    AS_WRA_1
    ,我或多或少很高兴忽略了这一点-欢迎回来,DLL地狱!)

在运行时,我使用反射从用户在UI中选择的包装器创建实例。奇怪的是,结果如下:

  • 我可以从
    创建实例作为\u WRA\u 2
  • 我得到了
    AS_WRA_1
    AS_WRA_3
    的BadImageFormatException

这与我的预期正好相反……我做错了什么?

如果您有一个使用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
会出现BadImageFormatException
AS_INT
没有外部引用,只有几个接口。根据,我的应用程序以64位进程启动,尽管我将其设置为编译为
X86
。我的错误:在configuration Manager中,
AS_EXEC
被设置为
X86
,但在项目设置中,它仍然被设置为目标
任何CPU
。哎呀。