我有一个asp.net核心项目,与VS正确构建,但不建立在msbuild下。dotnet恢复vs. nuget恢复与teamcity
我使用的TeamCity和构建过程是一个恢复的NuGet的一部分,它没有找到所有常见的库(系统等)。
我试图做与teamcity相同的步骤,但手动使用msbuild,它失败了,找不到libs。
我添加了一个dotnet恢复步骤,然后它工作。
那么,nuget还原和点网络还原有什么区别?
我有一个asp.net核心项目,与VS正确构建,但不建立在msbuild下。dotnet恢复vs. nuget恢复与teamcity
我使用的TeamCity和构建过程是一个恢复的NuGet的一部分,它没有找到所有常见的库(系统等)。
我试图做与teamcity相同的步骤,但手动使用msbuild,它失败了,找不到libs。
我添加了一个dotnet恢复步骤,然后它工作。
那么,nuget还原和点网络还原有什么区别?
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。
目前,有2种方式如何的NuGet软件包可以在项目中使用(3实际上,但是让我们忽略project.json
上UWP暂时):
packages.config
:引用的“经典”的方式NuGet包。这假设NuGet是一个单独的工具,msbuild不知道任何关于NuGet的信息。诸如nuget.exe
或VS集成工具之类的NuGet客户端会看到packages.config
文件,并在恢复时将引用的软件包下载到本地文件夹中。软件包安装将修改项目以从该本地文件夹中引用资源。因此,packages.config
项目的恢复只会下载文件。PackageReference
:该项目包含引用NuGet包的MSBuild项目。与packages.config
不同,只列出了直接依赖关系,项目文件不直接引用包中的任何资产(dll文件,内容文件)。在恢复时,NuGet通过评估直接和传递依赖关系来确定依赖关系图,确保将所有包下载到用户的全局包缓存中(而不是解决方案本地,因此只下载一次),并将资产文件写入obj
文件夹其中包含项目使用的所有软件包和资产的列表,以及如果任何软件包包含需要添加到项目中的构建逻辑的附加msbuild目标。因此,nuget恢复可能会下载软件包,如果它们尚未位于全局缓存中并创建此资产文件。除了包的引用,该项目也可以参考CLI工具,它是包含额外的命令,将可用于在项目目录的dotnet
的NuGet包。的MSBuild的集成恢复仅适用于PackageReference
类型项目(.NET标准,.NET核心默认,但选择将其任何.NET项目),而不是为packages.config
项目。如果您使用nuget.exe
(例如4.3.0)的新版本,则可以恢复两种项目类型。
你有关丢失的错误类型是更加有趣:“参考组件”(即作为输入传递到编译库)没有安装在系统上,但通过的NuGet包来。因此,只要包装的NuGet从全局包缓存丢失或obj/project.assets.json
文件还没有被恢复操作产生的,基本类型,如System.Object
将无法使用编译器。
这很清楚事情!谢谢!有鉴于此,是否有理由再使用package.config机制? – Thomas
'内容'功能(将文件复制到消费项目的源文件)已被删除并替换为'contentFiles'功能。另外,'PackageReference'只适用于VS 2017+(NuGet 4. *,MSBuild 15+) –
Nuget恢复将确保您的nuget依赖关系已下载并可用于您的项目。而dotnet恢复是所有nuget依赖关系以及引用和项目特定工具的完整恢复。这意味着如果你运行nuget restore,你只需要恢复nuget包。
根据docs.microsoft.com:Dotnet Restore
的dotnet的恢复命令使用的NuGet恢复的依赖,以及那些在项目文件中指定的特定项目的工具...
''nuget.exe恢复'''PackageReference'类型项目的'dotnet恢复'也是一样的。 –
我曾与一个.NET核心2项目类似的问题,将建立我的工作站上就好了 - 无论是内部的Visual Studio 2017年的MSBuild只使用 - 但在TeamCity的没有建立。该errormessage的是:
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.
在我的构建配置中我已经有一个的NuGet构建步骤之前,安装步骤:
原来,我不得不使用:
我怀疑是因为DOTNET恢复工作,但的NuGet没有对团队市明的NuGet是较旧的版本,不支持了解PackageReferences。 NuGet将需要至少4.0版本。 –
我们遇到同样的问题,dotnet恢复工作,但nuget恢复不工作。对于我们来说,这是发生在TeamCity和本地。 – r12