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

使用NuGet还原锁定文件时出现NU1004错误:多项目解决方案下锁定模式失效问题排查

解决NuGet多项目解决方案下Locked Mode的NU1004错误

我来帮你分析下这个问题——核心原因出在控制台项目的packages.lock.json文件里错误记录了类库项目依赖的My.Package版本:你看到的"My.Package": "1.0.0-ci.0"是个无效的占位版本,和类库自己lock文件里的1.0.0-ci.3完全不一致,这直接触发了NU1004的一致性校验失败。

这个问题通常是因为你在多项目场景下,没有以解决方案级别的维度来生成和更新lock文件,导致NuGet没能正确同步项目间的依赖版本。下面是具体的解决步骤:

步骤1:清理现有lock文件

先删除解决方案下所有项目的packages.lock.json文件,确保从头开始生成正确的依赖锁定信息。

步骤2:以解决方案维度重新生成lock文件

不要单独针对某个项目执行restore,切换到解决方案的根目录,执行以下命令(推荐用dotnet命令,对.NET Core项目的支持更稳定):

dotnet restore --use-lock-file --force-evaluate

如果坚持用nuget.exe,也要在解决方案根目录执行:

nuget restore -UseLockFile -ForceEvaluate

这样NuGet会统一分析所有项目的依赖关系,确保控制台项目的lock文件里,类库项目依赖的My.Package版本和类库自身lock文件的resolved版本完全一致。

步骤3:验证lock文件的正确性

重新生成后,检查控制台项目的packages.lock.json,里面的classlibrary1依赖应该变成类似这样:

"classlibrary1": {
  "type": "Project",
  "dependencies": {
    "My.Package": "1.0.0-ci.3"
  }
}

确保这个版本号和类库项目lock文件里的resolved版本完全匹配。

步骤4:执行Locked Mode的Restore

现在再执行锁定模式的restore命令,就不会触发NU1004错误了:

dotnet restore --locked-mode
# 或者用nuget.exe
nuget restore -LockedMode

额外注意事项

  • 确保所有项目的PackageReference版本范围完全一致(比如都是1.0.*-ci.*),避免版本范围差异导致NuGet解析出不同的版本。
  • 对于多项目解决方案,优先使用dotnet restore而非nuget.exe restore,因为dotnet命令和MSBuild的集成更紧密,能更好处理项目间的依赖传递。
  • 如果后续需要更新依赖版本,依然要在解决方案根目录执行--force-evaluate的restore命令,保证所有项目的lock文件同步更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:03:14