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

NuGet包安装仅添加x86 DLL引用,如何同时引入x86和x64版本?

解决自定义NuGet包同时添加x86和x64 DLL引用的问题

核心思路

不能直接在安装时同时添加两个架构的DLL引用(会导致冲突),正确的做法是通过NuGet的.targets文件配置条件性引用,让MSBuild在构建阶段根据项目的目标平台自动选择对应的DLL。

调整NuGet包结构

首先确保你的包结构符合以下规范:

YourPackage/
├── build/
│   └── YourPackage.targets  # 文件名必须和包名一致
├── lib/
│   ├── x86/
│   │   └── YourLibrary.dll
│   └── x64/
│       └── YourLibrary.dll

注意:不要将DLL直接放在lib根目录下,否则NuGet会自动引用根目录的DLL,忽略架构子目录的配置。

编写正确的.targets文件

替换你现有的.targets文件,使用以下内容(将YourPackage和YourLibrary替换为实际名称):

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- 针对x86平台添加引用 -->
  <ItemGroup Condition="'$(PlatformTarget)' == 'x86'">
    <Reference Include="YourLibrary">
      <HintPath>$(MSBuildThisFileDirectory)..\lib\x86\YourLibrary.dll</HintPath>
      <Private>True</Private>
    </Reference>
  </ItemGroup>

  <!-- 针对x64平台添加引用 -->
  <ItemGroup Condition="'$(PlatformTarget)' == 'x64'">
    <Reference Include="YourLibrary">
      <HintPath>$(MSBuildThisFileDirectory)..\lib\x64\YourLibrary.dll</HintPath>
      <Private>True</Private>
    </Reference>
  </ItemGroup>
</Project>

关键配置说明:

  • $(MSBuildThisFileDirectory):自动指向NuGet包中build文件夹的路径,确保能正确定位lib目录下的DLL。
  • Condition:根据项目的PlatformTarget值触发对应架构的引用逻辑,避免同时加载两个DLL导致冲突。
  • <Private>True</Private>:确保DLL会被复制到项目输出目录,随项目一起发布。

验证步骤

  1. 重新打包NuGet包,确认build和lib目录结构完全符合要求。
  2. 在项目中卸载旧包,清理bin/obj目录后,重新安装新包。
  3. 切换项目目标平台(右键项目→属性→生成→平台目标)为x86或x64,查看引用是否自动切换为对应架构的DLL。
  4. 构建项目,检查输出目录中是否只有当前平台的DLL文件。

常见问题排查

  • 引用不生效:检查.targets文件是否放在build目录下,且文件名与包名完全一致。
  • 出现引用冲突:确保lib根目录下没有同名DLL,避免NuGet自动添加默认引用覆盖条件引用。
  • 输出目录无DLL:确认<Private>True</Private>配置正确,或检查项目引用的“复制本地”属性是否为True。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:36:06