我有一個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