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

使用Git子模块和.NET Core时递归csproj依赖的NU1105问题

解决.NET Core 2.0 SDK风格csproj+Git递归子模块下的NU1105还原错误

我之前在维护一个多子模块的.NET Core项目时,碰到过和你完全一样的NU1105错误,折腾了好一阵才搞清楚根源,给你分享下解决思路:

问题根源

.NET Core 2.0的SDK风格csproj在NuGet还原阶段,依赖解决方案(.sln)中显式包含的所有项目来构建完整的依赖链。哪怕你的子模块项目A引用了嵌套子模块里的项目B,只要项目B没被添加到顶层解决方案中,NuGet就无法找到项目B的还原元数据,直接抛出NU1105错误——这和旧的非SDK风格csproj的处理逻辑完全不同,旧版本可能会自动解析嵌套引用,但SDK风格要求所有参与依赖的项目都必须在解决方案里有记录。

具体解决步骤

  • 把所有嵌套子模块的csproj都添加到顶层解决方案
    不管这些项目是直接被顶层项目引用,还是被其他子模块间接引用,都要显式加入sln:

    • 命令行方式(推荐,路径更准确):
      dotnet sln add ./src/submoduleA/nested-submoduleB/ProjectB.csproj
      
    • 或者在Visual Studio里右键顶层解决方案 → 添加 → 现有项目,找到嵌套子模块里的目标csproj文件。
  • 检查ProjectReference的路径合法性
    确保子模块里的csproj中,对嵌套子模块项目的引用用的是相对路径(相对于当前csproj的位置),比如:

    <ProjectReference Include="..\..\nested-submoduleB\ProjectB.csproj" />
    

    绝对路径会导致跨环境解析失败,也是触发NU1105的常见诱因。

  • 强制清理缓存并重新还原
    有时候旧的NuGet缓存会干扰还原过程,执行以下命令彻底重置:

    dotnet clean
    dotnet nuget locals all --clear
    dotnet restore
    

额外说明

你提到之前的类似问题已经过时,这点完全正确——因为非SDK风格的csproj依赖packages.config管理包,而.NET Core 2.0的SDK风格csproj采用了基于MSBuild的依赖解析逻辑,对解决方案的项目完整性要求更高,这也是为什么旧方案不适用于你的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:01:30