web-dev-qa-db-ja.com

nuget .propsファイルと.targetsファイルをソースコードリポジトリの一部にする必要がありますか?

これらのファイルはパッケージの復元中に作成されるため、リポジトリにある必要はないと思います。質問に答えるのに役立つかもしれないそれらのファイルの目的のさらなる文書はありますか?

15

.NET Coreプロジェクトの場合、nuget.g.targetsとnuget.g.propsはNuGetの復元によって生成されます。それらはobjフォルダーに作成されます。したがって、バージョン管理にこれらを含める必要はありません。通常、objフォルダー内のファイルはバージョン管理に含まれていません。

Visual Studioは、これらのファイルが見つからない場合、ソリューションを開くと自動的に復元します。

ビルドサーバーを使用している場合は、dotnet restoreを実行してこれらのファイルを復元できます。 Visual Studio2017とともにインストールされたMSBuild15を使用して、ソリューションに対してmsbuild /t:Restoreを実行することにより、これらのファイルを復元することもできます。

Nuget.g.targetsファイルとnuget.g.propsファイルは、パッケージキャッシュがマシン上にある場所へのパスなど、さまざまなプロパティを定義します。また、プロジェクトで参照されるNuGetパッケージが必要とするMSBuildインポートも含まれます。

たとえば、Microsoft.Net.Test.Sdk NuGetパッケージが参照されている場合、nuget.g.targetsとnuget.g.propsは、そのNuGetパッケージに含まれているMSBuildファイルをインポートします。 packages.configファイルを使用する場合、これらのインポートはプロジェクトファイル(.csproj)に直接追加されます。

8
Matt Ward

.targetsファイルはプロジェクトファイルから参照されて含まれているため、プロジェクトファイルを読み取るときに配置する必要があります。プロジェクトのビルドの開始時にNuGetパッケージの復元が実行された場合、それらのファイルは、プロジェクトファイルが読み取られた時点では存在しません。

したがって、これらのファイルをソース管理に入れて、プロジェクトファイルがロードされたときに常に存在するようにします。

別のアプローチは、ソリューション全体に対してNuGetパッケージの復元を強制するプロジェクト(他のすべてのプロジェクトが依存する)を用意することです(ただし、それ自体はパッケージを使用しません)。ビルド後、プロジェクトファイルが配置されると、すべてのターゲットファイルが配置されます。

もちろん、多くのNuGetパッケージはそのようなファイルを使用せず、これは問題ではありません。

3
Richard