TeamCityを使用した「dotnetrestore」と「nugetrestore」



Dotnet Restorevs Nuget Restorewith Teamcity



解決:

両方nugetの復元とdotnetの復元はほぼ同じです。NuGetの復元操作を実行します。

唯一の違い:dotnet restoreは、呼び出すのに便利なラッパーですdotnet msbuild / t:MSBuildに統合された復元を呼び出す復元。これは、Visual Studio 2017(完全なVisual Studio、ビルドツール)やMono 5.2 +(=>など)などのNuGetを含むMSBuildディストリビューションでのみ機能します。msbuild / t:Restore)およびこの便利なコマンドを提供する.NET CoreSDK。



現時点では、プロジェクトでNuGetパッケージを使用する方法は2つあります(実際には3つですが、無視しましょう)今のところUWP上のproject.json):

  • packages.config:NuGetパッケージを参照する「クラシック」な方法。これは、NuGetが別のツールであり、MSBuildがNuGetについて何も知らないことを前提としています。などのNuGetクライアントnuget.exeまたはVisualStudioに統合されたツールはpackages.configファイルを作成し、復元時に参照されているパッケージをローカルフォルダーにダウンロードします。パッケージのインストールは、このローカルフォルダーからアセットを参照するようにプロジェクトを変更します。したがって、packages.configプロジェクトは、ファイルのみをダウンロードします。
  • PackageReference:プロジェクトには、NuGetパッケージを参照するMSBuildアイテムが含まれています。ようではないpackages.configの場合、直接の依存関係のみがリストされ、プロジェクトファイルはパッケージからアセット(DLLファイル、コンテンツファイル)を直接参照しません。復元時に、NuGetは直接および推移的な依存関係を評価することで依存関係グラフを把握し、すべてのパッケージがユーザーのグローバルパッケージキャッシュにダウンロードされていることを確認し(ソリューションローカルではないため、一度だけダウンロードされます)、アセットファイルをに書き込みます。プロジェクトが使用するすべてのパッケージとアセットのリスト、およびプロジェクトに追加する必要のあるビルドロジックがパッケージに含まれている場合は追加のMSBuildターゲットを含むobjフォルダー。そのため、NuGetリストアは、パッケージがまだグローバルキャッシュにない場合にパッケージをダウンロードして、このアセットファイルを作成する場合があります。パッケージ参照に加えて、プロジェクトはCLIツールも参照できます。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):アセットファイル 'D: TeamCity  buildAgent  work  596486b1d4e7a8e7  Source  Integrations  SomeAPI  obj  project.assets.json 'が見つかりません。 NuGetパッケージの復元を実行して、このファイルを生成します。

ビルド構成では、ビルドステップの前にすでにNuGetインストールステップがありました。



  • NuGetversion:3.4.4
  • 復元モード:インストール

私が使用しなければならなかったことが判明しました:

  • NuGetバージョン:4.0.0以降
  • 復元モード:復元(NuGet 2.7以降が必要)