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

.NET Core 类库如何排除语言资源?

如何在.NET Core类库中排除多余语言资源包

问题核心

你需要在类库层面控制排除依赖(如Microsoft.Data.SqlClient)附带的多语言资源,同时避免下游exe项目出现功能异常,且无需为每个exe单独配置规则。

可行解决方案

1. 精准排除语言资源,保留核心依赖传递性

你第一种方法用<PrivateAssets>all</PrivateAssets>导致SqlClient失效,是因为该配置会将所有依赖资产设为私有,下游exe无法获取核心程序集。正确做法是只排除语言资源类资产:

<ItemGroup>
  <PackageReference Include="Microsoft.Data.SqlClient" Version="5.2.0">
    <!-- 仅排除卫星语言资源包,保留核心组件的传递引用 -->
    <ExcludeAssets>satelliteresources</ExcludeAssets>
  </PackageReference>
</ItemGroup>

说明:satelliteresources是NuGet专门标识语言资源包的资产类型,该配置只会移除多余的.resources.dll文件,不会影响SqlClient的核心功能。

2. 让类库的语言资源规则传递给下游项目

默认情况下类库的<SatelliteResourceLanguages>不会传递给exe项目,可通过标记公共资产实现规则继承:
在类库项目文件中添加:

<PropertyGroup>
  <!-- 指定仅保留英文资源 -->
  <SatelliteResourceLanguages>en</SatelliteResourceLanguages>
  <!-- 将属性配置标记为公共资产,传递给引用该类库的所有项目 -->
  <PublicAssets>all</PublicAssets>
</PropertyGroup>

这样下游exe项目会自动继承该语言过滤规则,无需重复配置。

3. 解决方案级全局统一配置

如果要为所有项目统一设置语言资源规则,可在解决方案根目录创建Directory.Build.props文件:

<Project>
  <PropertyGroup>
    <SatelliteResourceLanguages>en</SatelliteResourceLanguages>
  </PropertyGroup>
</Project>

所有.NET项目会自动加载该文件,统一应用语言资源排除规则。

验证步骤

配置完成后构建exe项目,检查输出目录下是否已移除非英文的语言子文件夹(如zh-Hans、fr等),同时测试SqlClient的数据库连接、查询等核心功能是否正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:12:23