gpt4 book ai didi

.net - “dotnet Restore”与 TeamCity 中的 'nuget restore'

转载 作者:行者123 更新时间:2023-12-03 07:10:43 28 4
gpt4 key购买 nike

我有一个 ASP.NET Core 项目,可以使用 Visual Studio 正确构建,但无法在 MSBuild 下构建。

它没有找到所有公共(public)库(系统等)。

我正在使用 TeamCity,构建过程的一部分是 nuget 恢复

我尝试执行与 TeamCity 相同的步骤,但使用 MSBuild 手动执行,但失败了,没有找到库。

我添加了一个 dotnet Restore 步骤,然后它就起作用了。

那么,nuget 恢复dotnet 恢复 之间有什么区别?

最佳答案

nuget restoredotnet restore 大致相同:它们执行 NuGet 恢复操作。

唯一的区别:dotnet restore 是一个调用 dotnet msbuild /t:Restore 的便捷包装器,它调用 MSBuild 集成的恢复。这仅适用于包含 NuGet 的 MSBuild 发行版,例如 Visual Studio 2017(完整的 Visual Studio、构建工具)或 Mono 5.2+ (=> msbuild /t:Restore ) 以及提供此便利命令的 .NET Core SDK。

目前,在项目中使用 NuGet 包的方式有两种(实际上是三种,但我们暂时忽略 UWP 上的 project.json):

  • packages.config :引用 NuGet 包的“经典”方式。这假设 NuGet 是一个单独的工具,并且 MSBuild 对 NuGet 一无所知。 NuGet 客户端(例如 nuget.exe 或 Visual Studio 集成工具)会看到 packages.config 文件,并在还原时将引用的包下载到本地文件夹中。包安装会修改项目以引用此本地文件夹中的资源。因此,恢复 packages.config 项目只会下载文件。
  • PackageReference :该项目包含引用 NuGet 包的 MSBuild 项。与 packages.config 不同,仅列出直接依赖项,项目文件不直接引用包外的任何 Assets (DLL 文件、内容文件)。恢复时,NuGet 通过评估直接依赖项和传递依赖项来计算依赖关系图,确保所有包都下载到用户的全局包缓存中(不是解决方案本地的,因此只下载一次)并将 Assets 文件写入 obj 文件夹其中包含项目使用的所有包和 Assets 的列表,以及其他 MSBuild 目标(如果任何包包含需要添加到项目中的生成逻辑)。因此,如果包尚未位于全局缓存中,NuGet 还原可能会下载包并创建此 Assets 文件。除了包引用之外,项目还可以引用 CLI 工具,这些工具是 NuGet 包,其中包含可用于项目目录中的 dotnet 的其他命令。

msbuild 集成恢复仅适用于 PackageReference 类型项目(默认为 .NET Standard、.NET Core,但它是任何 .NET 项目的选择加入),不适用于 packages.config 项目。如果您使用新版本nuget.exe(例如4.3.0),它可以恢复两种项目类型。

有关缺少类型的错误更有趣:“引用程序集”(作为输入传递给编译器的库)未安装在系统上,而是通过 NuGet 包提供。因此,只要全局包缓存中缺少 NuGet 包,或者恢复操作尚未生成 obj/project.assets.json 文件,编译器就无法使用 System.Object 等基本类型。

关于.net - “dotnet Restore”与 TeamCity 中的 'nuget restore',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45897271/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com