You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF C#项目中如何基于CPU架构引用Win32程序集?

在WPF C#项目中按架构引用Win32程序集的解决方案

一、按目标CPU架构自动引用对应版本的程序集

方法1:手动修改项目文件(.csproj)

Visual Studio UI仅支持添加单个引用,但可直接编辑项目文件,通过MSBuild条件属性实现分架构引用:

针对托管互操作程序集(如COM互操作集)

在项目文件中添加以下条件引用配置:

<!-- x86架构引用配置 -->
<ItemGroup Condition=" '$(Platform)' == 'x86' ">
  <Reference Include="OldWin32Interop">
    <HintPath>Libs\x86\OldWin32Interop.dll</HintPath>
    <Private>True</Private>
  </Reference>
</ItemGroup>

<!-- x64架构引用配置 -->
<ItemGroup Condition=" '$(Platform)' == 'x64' ">
  <Reference Include="OldWin32Interop">
    <HintPath>Libs\x64\OldWin32Interop.dll</HintPath>
    <Private>True</Private>
  </Reference>
</ItemGroup>

针对原生Win32 DLL(非托管)

无需添加引用,只需配置按架构复制到输出目录:

<ItemGroup Condition=" '$(Platform)' == 'x86' ">
  <None Include="Libs\x86\OldWin32.dll">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </None>
</ItemGroup>

<ItemGroup Condition=" '$(Platform)' == 'x64' ">
  <None Include="Libs\x64\OldWin32.dll">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </None>
</ItemGroup>

保存项目文件后,Visual Studio会根据当前选中的目标平台自动加载对应版本的文件。

方法2:封装为NuGet包

将不同架构的程序集打包成NuGet包,利用NuGet的架构特定目录特性:

  • 在NuGet包目录中创建 lib/x86 和 lib/x64 文件夹,分别放入对应架构的程序集
  • 生成并安装NuGet包后,Visual Studio会自动根据目标平台引用对应目录下的程序集,无需手动修改项目文件

二、关于“Fat”程序集的说明

对于原生Win32非托管程序集,不存在包含x86和x64架构的“Fat”程序集——原生代码是针对特定CPU指令集编译的,无法将两种架构的机器码合并到单个DLL中。

如果是托管互操作程序集,本身可编译为AnyCPU,但这仅实现托管层的兼容,对应的原生Win32 DLL仍需分架构部署,因此无法通过单一“Fat”程序集解决架构依赖问题。

内容的提问来源于stack exchange,提问作者Rastikan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 15:52:41