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

.NET主项目未自动引入引用项目的依赖文件问题排查

问题背景

我有以下项目结构:

  • MyConsoleApplication(.NET 6)引用了MyClassLibrary(.NET Core 3.1)项目
  • MyClassLibrary包含两个NuGet包引用:
<PackageReference Include="cef.redist.x64" Version="113.1.4" />
<PackageReference Include="CefSharp.OffScreen.NETCore" Version="113.1.40" />

其中cef.redist.x64包包含如下结构的文件:

CEF
 ╚ locales
    ╚ af.pak

当构建MyConsoleApplication时,locales文件夹不会出现在输出目录(\MyConsoleApplication\bin\Debug\net6.0\runtimes\win-x64\native\locales\af.pak),除非在MyConsoleApplication中也添加对CefSharp.OffScreen.NETCore的直接引用:

<ItemGroup>
  <PackageReference Include="CefSharp.OffScreen.NETCore" Version="113.1.40" />
</ItemGroup>

我想搞清楚为什么间接依赖的包没有被当成直接依赖处理,以及显式添加引用后结果不同的原因。不确定这是CEF相关NuGet包的特性,还是我不了解的.NET通用规则。我原本以为被引用项目(MyClassLibrary)的依赖会被主项目(MyConsoleApplication)视为直接依赖,添加直接引用不应该影响输出目录的内容。


问题分析与解决

这是NuGet依赖传递结合跨框架项目引用的资产筛选问题,核心原因有两点:

1. 跨框架项目引用的资产传递限制

MyClassLibrary基于.NET Core 3.1,而主项目MyConsoleApplication是.NET 6,属于跨目标框架的项目引用。NuGet在处理跨框架依赖传递时,会默认筛选掉与主项目框架版本不兼容的资产。CEF的locales文件夹属于原生运行时资产,这类资产的兼容性判断会严格关联项目的目标框架,中间类库的框架版本差异会导致主项目无法间接获取这些资产。

2. CefSharp包的特殊打包逻辑

CefSharp.OffScreen.NETCore包将原生资产(包括locales文件)放置在runtimes/win-x64/native目录下,这类运行时特定资产的传递规则是:只有当直接引用该包的项目与资产的目标运行时完全匹配时,资产才会被完整复制到输出目录。通过.NET Core 3.1类库间接引用时,主项目(.NET 6)解析依赖时会跳过这些跨框架的原生资产传递。

解决方法

你不需要必须在主项目中添加直接引用,也可以通过以下两种方式解决:

方式一:保留间接引用,调整资产传递规则

在MyClassLibrary的csproj中,修改CefSharp.OffScreen.NETCore的包引用,强制其资产传递到主项目:

<PackageReference Include="CefSharp.OffScreen.NETCore" Version="113.1.40">
  <PrivateAssets>none</PrivateAssets>
  <IncludeAssets>all</IncludeAssets>
</PackageReference>

方式二:手动复制原生资产

在MyConsoleApplication的csproj中添加配置,直接从NuGet缓存中复制locales文件到输出目录:

<ItemGroup>
  <Content Include="$(NuGetPackageRoot)cef.redist.x64\113.1.4\CEF\locales\**">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    <TargetPath>runtimes/win-x64/native/locales/%(RecursiveDir)%(Filename)%(Extension)</TargetPath>
  </Content>
</ItemGroup>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:13:10