使用teamcity进行dotnet恢复与nuget恢复

Tho*_*mas 39 .net msbuild teamcity nuget

我有一个asp.net核心项目,可以使用VS正确构建,但不会在msbuild下构建.

它没有找到所有常见的库(系统等)

我正在使用teamcity,部分构建过程是一个nuget恢复.

我尝试执行与teamcity相同的步骤,但是手动使用msbuild,它失败了,没有找到libs.

我添加了一个dotnet还原步骤然后它工作了.

那么,nuget还原dotnet还原之间有什么区别?

Mar*_*ich 56

双方nuget restoredotnet restore大致相同:他们执行的NuGet恢复操作.

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

目前,有两种方法可以在项目中使用NuGet包(实际上有3种,但project.json暂时忽略UWP):

  • packages.config:引用NuGet包的"经典"方式.这假设NuGet是一个单独的工具,msbuild对NuGet一无所知.NuGet客户端(例如nuget.exeVS集成工具)会查看该packages.config文件,并在还原时将引用的包下载到本地文件夹中.程序包安装会修改项目以引用此本地文件夹中的资产.因此,packages.config项目的还原只会下载文件.
  • PackageReference:该项目包含引用NuGet包的MSBuild项.与之不同packages.config,仅列出了直接依赖项,并且项目文件不直接引用包中的任何资产(dll文件,内容文件).在恢复时,NuGet通过评估直接和传递依赖关系来确定依赖关系图,确保将所有包下载到用户的全局包缓存中(不是解决方案本地,因此只下载一次)并将资源文件写入文件obj夹中包含项目使用的所有包和资产的列表,以及如果任何包包含需要添加到项目的构建逻辑的其他msbuild目标.因此,nuget恢复可以下载包(如果它们尚未在全局缓存中)并创建此资产文件.除了包引用之外,项目还可以引用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,编译器就无法使用基本类型.

  • "content"功能(将文件复制到消费项目的源代码)已被删除,并替换为"contentFiles"功能.此外,`PackageReference`仅适用于VS 2017+(NuGet 4.*,MSBuild 15+) (2认同)

hso*_*sop 5

我在 .NET Core 2 项目上遇到了类似的问题,该项目在我的工作站上构建得很好——无论是在 Visual Studio 2017 中还是仅使用 MSBuild——但没有在 TeamCity 中构建。错误消息是:

C:\Program Files\dotnet\sdk\2.1.4\Sdks\Microsoft.NET.Sdk\build\Microsoft.PackageDependencyResolution.targets(327, 5):
Assets file 'D:\TeamCity\buildAgent\work\596486b1d4e7a8e7\Source\Integrations\SomeAPI\obj\project.assets.json' not found.
Run a NuGet package restore to generate this file.
Run Code Online (Sandbox Code Playgroud)

在我的构建配置中,我在构建步骤之前已经有一个 NuGet 安装步骤:

  • NuGet 版本:3.4.4
  • 恢复模式:安装

结果我不得不使用:

  • NuGet 版本:4.0.0 或更高
  • 还原模式:还原(需要 NuGet 2.7+)