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

如何排除NuGet包附带的x64 dll文件输出到项目输出目录?

解决方案

以下方案均通过修改项目配置实现,无需使用后期生成事件删除文件。

方案1:直接过滤x64版本的原生dll

在项目.csproj文件的ItemGroup节点中添加排除规则,直接阻止x64版本dll被拷贝到输出目录:

<ItemGroup>
  <!-- 原有PackageReference配置保持不变 -->
  <Content Remove="$(NuGetPackageRoot)grpc.core\*\runtimes\win-x64\native\grpc_csharp_ext.x64.dll" />
  <None Remove="$(NuGetPackageRoot)grpc.core\*\runtimes\win-x64\native\grpc_csharp_ext.x64.dll" />
</ItemGroup>

如果需要适配动态的平台配置,也可以用条件过滤规则自动匹配当前生成架构:

<ItemGroup>
  <NativeLibs Remove="%(NativeLibs.Identity)" Condition="$([System.String]::Copy('%(NativeLibs.FileName)').Contains('x64'))" />
</ItemGroup>

方案2:显式指定运行时标识符

如果项目仅需在x86 Windows环境运行,直接在.csproj的PropertyGroup节点中指定运行时标识,构建系统会自动过滤所有非目标架构的原生资产:

<PropertyGroup>
  <!-- 单架构场景 -->
  <RuntimeIdentifier>win-x86</RuntimeIdentifier>
</PropertyGroup>

如果需要兼容多架构但仅排除x64,也可以配置复数形式的运行时标识列表,仅保留需要的架构:

<PropertyGroup>
  <RuntimeIdentifiers>win-x86;linux-x86</RuntimeIdentifiers>
</PropertyGroup>

方案3:禁用自动拷贝逻辑后手动引入需要的dll

Grpc.Core包内置了Grpc_CopyNative开关,可以关闭默认的原生dll拷贝逻辑,之后手动引入你需要的x86版本dll即可:

<PropertyGroup>
  <Grpc_CopyNative>false</Grpc_CopyNative>
</PropertyGroup>
<ItemGroup>
  <Content Include="$(NuGetPackageRoot)grpc.core\*\runtimes\win-x86\native\grpc_csharp_ext.x86.dll">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    <Link>grpc_csharp_ext.x86.dll</Link>
  </Content>
</ItemGroup>

上述配置对直接依赖Grpc.Core或间接依赖Grpc.Core的项目都生效,Grpc_CopyNative是Grpc官方包内置的配置项,兼容性稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:15:03