NuGet 警告 NU1512

RestoreForceEvaluate 會覆寫 RestoreLockedMode;套件的鎖定檔案會被重新評估並重新生成,鎖定模式則會被忽略。

問題

兩者都RestoreLockedModeRestoreForceEvaluate啟用用於還原,但這些選項是相互矛盾的:

  • RestoreLockedMode 要求 packages.lock.json 檔案保持不變,若已解決的套件相依性與鎖定檔案不同,則還原失敗。
  • RestoreForceEvaluate NuGet 強制每次還原時重新評估套件相依關係並重新生成鎖檔案。

當兩者同時設定時, RestoreForceEvaluate 優先權為:鎖檔案會被重新評估並重新生成,而請求的鎖定模式則被忽略。 此警告提高是為了避免忽略鎖定模式靜音。

解決方案

根據您的意圖,只啟用以下一項物業:

  • 為了保證可重複還原(例如 CI/CD 情境),請保持RestoreLockedMode啟用並停止設定。RestoreForceEvaluate 例如,移除 --force-evaluate 還原指令中的選項(或 -p:RestoreForceEvaluate=true):

    dotnet restore --locked-mode
    
  • 若要有意識地重新評估浮動版本並重新產生鎖檔案,請保持RestoreForceEvaluate啟用並停止設定:RestoreLockedMode

    dotnet restore --force-evaluate
    

Note

此警告預設會從 .NET 11 SDK(SdkAnalysisLevel11.0.100以上)開始發出。 你可以更改 SdkAnalysisLevel 屬性來控制這種行為。