DOTNET集中化パッケージバージョン管理


インprevious post 私は、複数のプロジェクトの間でNugetパッケージを保つために変数を使うことについて話しました;現在、より良い方法があります.

概要
前のポストでは、ディレクトリにある「倉庫ワイド」変数を利用する方法を実証しました.ビルド.小道具フォルダ.これらの変数を定義すると、同じバージョンのリポジトリを通して依存関係を保つために、あなたのcsprojにリテラル値ではなく変数を使うことができます.
現在(レビューで)機能がありますhttps://github.com/NuGet/Home/wiki/Centrally-managing-NuGet-package-versions これは、少なくとも私の意見では、よりエレガントな方法で、同じことを行うことができます.

設定
レビュー機能は“ディレクトリ. package . props”と呼ばれる新しい“リポジトリワイド”ファイルに依存します.使用https://github.com/Kritner-Blogs/DirectoryBuildProps/releases/tag/v1.1 出発点として,集中型パッケージバージョン管理を紹介します.

ディレクトリを更新します.ビルド.小道具
まず、「ディレクトリ. build . props」ファイルを更新します.
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
これは、Visual Studio、ライダー、DotNet CLIなどを示します.そして、現在のフォルダだけでなく、その子と同様に中央のパッケージバージョン管理が使用されます.

ディレクトリを作る.パッケージ.小道具
“directory . build . props”と同じフォルダ内では、新しいディレクトリ“directory . package . props”を作成します.このファイルは、リポジトリ間で使用されるすべてのパッケージに使用されるNUGETパッケージバージョンを指定するために使用されます.「Kritner . solarProjection」を使用し続けて、我々は新しい「ディレクトリ. package . props」ファイルをバージョンを指定するために準備します.
<Project>
    <ItemGroup>
        <PackageVersion Include="Kritner.SolarProjection" Version="1.0.2" />
    </ItemGroup>
</Project>
上記の例では、パッケージを定義しているだけでなく、そのパッケージが同じCSProjファイル内に同じレベルで、または“Directory . build . props”ファイルがあるディレクトリの子として記載されているときに使用するバージョンを定義しています.
上記のファイルには、パッケージが自動的にcsprojファイルに含まれていないことに注意してください.パッケージがcsprojファイルにリストされているときに使用するバージョンのみを定義します.

csprojファイルを更新する
現在、中央のパッケージバージョン管理が我々の倉庫で使用されているので、我々はそれを利用するために我々のcsprojファイルに更新をする必要がありますつまり、csprojファイルからバージョン宣言を削除します.
現在、私たちのcsprojファイルに次のようなものがあります.
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Kritner.SolarProjection" Version="$(NuGet-Kritner-SolarProjection)" />
  </ItemGroup>

</Project>
上記では、古い「変数スタイル」バージョンが使用されていることに注意してください.
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Kritner.SolarProjection" />
  </ItemGroup>

</Project>

追加メモ
以前のポストでは、変数を利用して、リポジトリを横切って使用されるnugetパッケージのバージョンを制御する方法を学びました.このポストでは、パッケージのバージョンを1つの場所で定義する方法と、そのパッケージ全体で使用される同じパッケージバージョンについて説明しました.
しかしながら、中央のパッケージバージョンを使用するときに注意するいくつかの他のものがあります:
  • 中央のパッケージversioningがオンにされている間、パッケージバージョンがcsprojで定義されるならば、あなたはコンパイルエラーです
  • これは開発者を強制的に「成功のピット」に押し込むのを助けるために行われます.パッケージバージョンが既に中央レベルで定義されているか、バージョンを指定する必要がないか、パッケージバージョンが“directory . package . props”ファイルに定義される必要がないという事実を意識させてください.
  • 上記の点に関連して、csprojファイル内の「overrideVersion」プロパティー(「バージョン」プロパティーに対して)を使用することによって、CSProj内のパッケージバージョンをオーバーライドすることができます.

  • 上記のイメージで示されるように、あなたはまだあなたの小道具ファイルの中で変数を使用することができます.私はこれらの変数を使用してパッケージのスイートのパッケージバージョンを定義するのが好きです.これが役に立つことができる例は、以下を含みますaspnetcore リポジトリ自体だけでなく、Microsoft Orleans - 変数として使用するパッケージスイートのバージョンを定義します.次に、“build . package . props”ファイルでは、パッケージごとにリテラルパッケージバージョンを定義するのではなく、使用されるパッケージごとにその変数に依存します.

  • 資源
  • https://github.com/NuGet/Home/wiki/Centrally-managing-NuGet-package-versions
  • Code at beginning of post
  • Code at end of post