私は周りを見回してたくさん読んでいますが、「nuget.props」ファイルが何であり、それが何に使用されているのかを説明する明確な答えを見つけることができませんでした。
何か説明があり、おそらくいくつかの例が参考になりますか?
いくつかの背景情報から始めて、.NETプロジェクトはMSBuildでビルドされます。 C#プロジェクトの.csproj
は、ファイル拡張子が付いたMSBuildプロジェクトファイルであり、通常はC#であり、他の言語ではないことを通知しますが、MSBuildに対しては単なるプロジェクトファイルです。 MSBuildには、基本タイプ、プロパティ、アイテム、ターゲット、およびタスクがいくつかあります。慣例により、プロパティとアイテムは拡張子.props
のファイルに入れられ、タスクとターゲットは.targets
で終わるファイルに入れられます。そのため、古いスタイルのcsproj
ファイルを見ると、<Import Project="path\to\Microsoft.Common.CSharp.props" />
と<Import Project="path\to\Microsoft.Common.CSharp.props" />
が表示されます。新しい、SDKスタイルのプロジェクトは 基本的には構文糖 で、まったく同じことを行います。
次に、MSBuildチームと.NETチームがビルドシステムを拡張可能にしました。したがって、MicrosoftがC#コンパイラ/ビルドシステムに組み込んだものに限定されるのではなく、ビルドシステムの一部を交換したり、ビルドシステムに追加したりできます。 NuGetがない場合、これを行う方法は、独自の.props
および.targets
ファイルをどこかに作成し、.csproj
を編集して<Import ... />
ステートメントを追加することです。小道具とターゲットがそれを使用しているものと同じソースコードリポジトリにある場合、これは正常に機能しますが、csprojを編集してprops
およびtargets
ファイルへのパスをハードコーディングしても機能しません。そうでなければ。
NuGetがこれを支援します。 適切な規則 でパッケージを作成する場合、NuGetは、プロップとターゲットが検出され、ビルドで使用されることを確認します。 packages.config
を使用するプロジェクトでは、NuGetは、インストール/アップグレード/アンインストール時にcsproj
を編集します。 PackageReference
を使用するプロジェクト、NuGetは、obj/
およびnuget.g.props
という名前の中間ディレクトリ(nuget.g.targets
フォルダー)にファイルを書き込みます。これにより、すべてのprops
および参照されているすべてのNuGetパッケージのtargets
ファイル。ビルドシステムはこれらのファイルを使用します。
システムにインストールされているバージョンよりも新しいバージョンの.NETコンパイラを使用する場合は、なぜこれを実行するのかを最初に考えることができます。 Microsoft.Net.Compilers パッケージを参照するだけで、パッケージ内の.props
および.targets
が、システムにインストールされたビルドシステムのコンパイルターゲット/タスクを置き換え、代わりにパッケージからのもの。これにより、コンパイラがシステムにインストールされる前に、または異なる開発者やCIエージェントに異なるバージョンのものがインストールされている場合でも、コードのすべてのビルドが同じコンパイラを使用するようにしたい場合に、新しい言語機能を使用できます。
別の例としては、事前にコンパイルされたスクリプトがあります。独自のスクリプト言語がある場合は、それらをC#ファイルに変換するビルドツールを作成し、「実際のビルド」の前に実行するMSBuildプロップとターゲットを記述して、カスタム言語をC#に変換し、生成された.cs
ファイルを保存します。中間フォルダーにこれらの生成されたファイルのMSBuildコンパイルアイテムを追加すると、C#コンパイラーはそれをプロジェクト内の他のすべての.cs
ファイルと一緒にコンパイルします。 MSBuildと.NETビルドシステムについては、ある程度の知識が必要ですが、可能です。