c# - 如何配置我的项目以在 64 位和 32 位计算机上运行

标签 c# x86 64-bit 32bit-64bit dll-reference

我有一个配置为“任何CPU”的项目。 现在我必须引用一个第三方 dll,它分别具有 x86 和 x64 编译版本(我无法获取第三方 dll 的 AnyCPU 版本)。 我已经更改了项目的配置文件,以根据平台引用特定的 dll,如下所示。(这是一个示例项目配置文件)

<PropertyGroup>
<CurrentPlatform>x86</CurrentPlatform>
<CurrentPlatform Condition="'$(PROCESSOR_ARCHITECTURE)'=='AMD64' or '$(PROCESSOR_ARCHITEW6432)'=='AMD64'">x64</CurrentPlatform>
</PropertyGroup>
<ItemGroup Condition=" '$(Platform)' == 'x86' ">
<!--Compiled as ClassLibrary target platform is x86-->
 <Reference Include="ClassLibrary">
    <HintPath>..\..\ClassLibrary_x86\ClassLibrary_x86\bin\Debug\ClassLibrary.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup Condition=" '$(Platform)' == 'x64' ">
 <!--Compiled as ClassLibrary target platform is x64-->
 <Reference Include="ClassLibrary">
      <HintPath>..\..\ClassLibrary_x64\ClassLibrary_x64\bin\Debug\ClassLibrary.dll</HintPath>
</Reference>
</ItemGroup>

当我在 Visual Studio 中运行此项目时,它无法正常工作。抛出BadImageException。当我将我的项目目标平台更改为 x86 并运行该应用程序时,它将起作用。如果我将其更改为 x64,则会抛出相同的 BadImageException

这里出了什么问题?我不想仅仅因为一个 dll 引用而创建两个项目(x86 和 x64)。如果上述方法错误,还有其他方法可以继续吗?

我的开发环境是VS2010和.NET4.0以及Win7 64位操作系统。

最佳答案

将平台选项更改为X86并仅引用32位dll。这样,可执行文件将在 32 位和 64 位操作系统上运行。 使用 x86 选项构建的应用程序将在 WOW64 下的 64 位操作系统上作为 32 位进程运行。

下一个链接也可以提供帮助 - Conditionally use 32/64 bit reference when building in Visual Studio

下一个链接显示how to load the right dll这就是您正在寻找的内容

关于c# - 如何配置我的项目以在 64 位和 32 位计算机上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16766510/

相关文章:

c# - 命令 '/bin/sh -c dotnet restore ./DockerTestDebian.csproj' 返回非零代码 : 1

c# - Serializable 和 DataContract(不是对比?)

c - 汇编中的纯高位乘法?

java - Watij 的 JxBrowser OS X/Java 1.6_64 不兼容?

c# - DataGrid 方法 DataSource 未找到

c# - 如何在本地运行基于 C# 的 AWS Lambda 函数进行开发?

c++ - 编译器是否优化了虚拟调用?

linux - 尽管使用 gcc 链接器,但获取对汇编代码的 "_printf"错误的 undefined reference

c# - 将字符串从 .NET 传递到 native (64 位)

java - 如果加载超过 2 GB 的数据,Java 8 会出现 EXCEPTION_ACCESS_VIOLATION