2017-08-26 5 views
8

私はasp.netコアプロジェクトを持っていますが、これはVSで正しくビルドされていますが、msbuildではビルドされません。私はチームシティーとnugetが復元されたビルドプロセスの一部を使用していチームネットでのドットネットリストアとナゲットのリストア

それはすべての一般的なLIBS(システム、など)を見つけられません。

私はteamcityと同じ手順を実行しようとしましたが、手動でmsbuildを実行しましたが、失敗してlibsが見つかりませんでした。

私はドットネットリストア手順を追加し、それは働いた。

ナゲットリストアドットネットリストアの違いは何ですか?

+0

私は以来、DOTNETが働いて復元することを疑うが、nugetチーム市にそのnugetがない古いバージョンではありませんでしたPackageReferencesを理解する。 NuGetはバージョン4.0以上である必要があります。 –

+0

私たちは同じ問題を抱えています。ドットネットリストアは動作しますが、ナゲットリストアは動作しません。そして私たちのために、それはTeamCityとローカルで起こっています。 – r12

答えて

13

nuget restoredotnet restoreはほぼ同じです。これらは、ナゲットの復元操作を実行します。

唯一の相違点:dotnet restoreは、dotnet msbuild /t:Restoreを呼び出す便利なラッパーで、msbuild-integrated復元を呼び出します。これはVS 2017(完全なVS、ビルドツール)またはMono 5.2+(=>msbuild /t:Restore)やこの便利なコマンドを提供する.NET Core SDKなど、NuGetを含むmsbuildディストリビューションでのみ機能します。現時点で

、プロジェクトで使用することができますどのようにNuGetパッケージの2つの方法があります(図3は、実際にはなくのは一瞬UWPにproject.jsonを無視してみましょう):

  • packages.config:参照の「古典的」な方法NuGetパッケージ。これは、NuGetが別のツールであり、msbuildがNuGetについて何も知らないことを前提としています。 nuget.exeやVS統合ツールなどのNuGetクライアントでは、packages.configファイルが表示され、参照パッケージを復元時にローカルフォルダにダウンロードします。パッケージインストールでは、このローカルフォルダからアセットを参照するようにプロジェクトが変更されます。そのため、packages.configプロジェクトの復元はファイルをダウンロードするだけです。
  • PackageReference:このプロジェクトには、NuGetパッケージを参照するMSBuildアイテムが含まれています。 packages.configとは異なり、直接の依存関係のみが表示され、プロジェクトファイルはパッケージからアセット(dllファイル、コンテンツファイル)を直接参照しません。復元時に、NuGetは直接依存関係と推移依存関係を評価して依存関係グラフを把握し、すべてのパッケージがユーザーのグローバルパッケージキャッシュにダウンロードされるようにします(ソリューションはローカルではないため、一度だけダウンロードされます)。objフォルダプロジェクトに使用するすべてのパッケージとアセットのリストが含まれています。パッケージにプロジェクトに追加する必要のあるビルドロジックが含まれている場合は、msbuildターゲットも追加されます。したがって、ナゲットリストアは、グローバルキャッシュにない場合はパッケージをダウンロードし、このアセットファイルを作成します。パッケージ参照に加えて、プロジェクトは、プロジェクトディレクトリ内のdotnetで利用可能な追加コマンドを含むNuGetパッケージであるCLIツールを参照することもできます。 packages.configプロジェクトのため

MSBuildの統合のみ(デフォルトでは、.NETの標準、.NETのコアが、オプトインされている任意の.NETプロジェクトのために)PackageReferenceタイプのプロジェクトのために働く復元しません。 nuget.exeの新しいバージョン(たとえば4.3.0)を使用すると、両方のプロジェクトタイプを復元できます。

欠落しているタイプに関するエラーはもう少し面白いです: "リファレンスアセンブリ"(コンパイラへの入力として渡されるライブラリ)はシステムにインストールされていませんが、NuGetパッケージを経由します。したがって、NuGetパッケージがグローバルパッケージキャッシュにないか、またはリストア操作によってobj/project.assets.jsonファイルが生成されていない限り、System.Objectのような基本タイプはコンパイラで使用できません。

+0

これは多くのことを明確にします!ありがとうございました!その点で、もうpackage.configメカニズムを使用する理由はありますか? – Thomas

+1

'content'機能(ファイルを消費しているプロジェクトのソースにコピーする)が削除され、' contentFiles'機能に置き換えられました。また、 'PackageReference'はVS 2017+(NuGet 4 *、MSBuild 15+)でのみ動作します。 –

-1

ナゲットリストアを使用すると、すべてのナゲット依存関係がダウンロードされ、プロジェクトで利用できるようになります。 dotnetのリストアは、すべてのナゲット依存性と参照とプロジェクト固有のツールの完全な復元です。つまり、nugetの復元を実行すると、のみが復元されます。 docs.microsoft.comによると

Dotnet Restore

DOTNETコマンドは依存関係だけでなく、プロジェクトファイルに指定されているプロジェクト固有のツールを復元するために、NuGetを使用して復元するには...

+0

'nuget.exe restore'も' PackageReference'型プロジェクトの 'dotnet restore'と同じことをします。 –

0

私はVisual Studio 2017とmsbuildのみを使用してワークステーションでうまく構築できる.net core 2プロジェクトと同様の問題がありましたが、TeamCityではビルドしませんでした。 ErrorMessageはされました:

  • NuGetversion::私はすでにNuGetは、ビルドステップの前にステップをインストールしていた私のビルド構成で

    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. 
    

    3.4.4

  • は復元モード:
をインストールします。

それは私が使用しなければならなかったことが分かった:

  • NuGetバージョン:4.0.0以上
  • 復元モード:(2.7以降NuGetが必要です)復元
関連する問題