モデルを使用してA
サードパーティの nuget パッケージ ( ) を参照する .NET Core アプリケーション ( ) について考えてみます。パッケージには、別のパッケージ ( ) への独自の依存関係があります:B
PackageReference
B
C
A -> B -> C
パッケージは、バージョン制約付きでB
依存関係を宣言しています。のコンパイル時の使用法がなく、直接参照することもありません -推移的な実行時の依存関係です。C
>= 1.0.0
A
C
C
ただし、パッケージのバージョン 1.0.0 C
(ビルドによって取得される) にはバグがあります。このバグは、より新しいバージョンで修正され、増分されたマイナー バージョン (v1.1.0 など) で nuget にリリースされました。
デフォルトでは、ビルドはこの最新バージョンを取得しません。これは、 https ://docs.microsoft.com/en-us/nuget/concepts/dependency-resolution#dependency-resolution-rules で説明されている「適用可能な最低バージョン」ルールによるものだと思います 。
ビルドにバグ修正 1.1.0 バージョンのパッケージを強制的に選択させるための推奨される方法は何C
ですか?
C
1 つの解決策は、からパッケージの 1.1.0 バージョンを明示的に参照することA
です。A
ただし、これについては何も知る必要がないため、カプセル化を破っているように感じC
ます。
理想的には、パッケージの作成者がB
依存関係を更新しC
て新しいバージョンを使用することですが、私はこのパッケージを制御できません。
また、ソリューションのルートにあるファイルを使用してDirectory.Build.props
、ソリューション全体でバージョンを強制的に更新しようとしました。
<ItemGroup>
<PackageReference Update="SomePackage.C" Version="1.1.0" />
</ItemGroup>
...しかし、これは機能しません(「適用可能な最低バージョン」ルールがまだ適用されていると思います)。の代わりに使用しても機能しますが、ソリューション内のすべてのプロジェクトにパッケージをインストールするだけです。Include
Update
ビルド プロセスに何らかの「ポリシー」を提供して、更新されたバージョンを強制的に取得できるようにしたいと考えていますが、これを行う方法が見つかりませんでした。
注: 私の実際の例は、ここで概説したものよりも複雑です。B
とはどちらC
も広く使用されている Microsoft ASP.NET パッケージでありC
、依存関係グラフの多数の場所に表示されます (私のアプリケーションはそのコードを直接参照することはありません)。