Mar*_*ich 56
双方nuget restore
并dotnet 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.exe
VS集成工具)会查看该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
,编译器就无法使用基本类型.
我在 .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 安装步骤:
结果我不得不使用:
归档时间: |
|
查看次数: |
16499 次 |
最近记录: |