18

モデルを使用してAサードパーティの nuget パッケージ ( ) を参照する .NET Core アプリケーション ( ) について考えてみます。パッケージには、別のパッケージ ( ) への独自の依存関係があります:BPackageReferenceBC

A -> B -> C

パッケージは、バージョン制約付きでB依存関係を宣言しています。のコンパイル時の使用法がなく、直接参照することもありません -推移的な実行時の依存関係です。C>= 1.0.0ACC

ただし、パッケージのバージョン 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ですか?

C1 つの解決策は、からパッケージの 1.1.0 バージョンを明示的に参照することAです。Aただし、これについては何も知る必要がないため、カプセル化を破っているように感じCます。

理想的には、パッケージの作成者がB依存関係を更新しCて新しいバージョンを使用することですが、私はこのパッケージを制御できません。

また、ソリューションのルートにあるファイルを使用してDirectory.Build.props、ソリューション全体でバージョンを強制的に更新しようとしました。

  <ItemGroup>
    <PackageReference Update="SomePackage.C" Version="1.1.0" />
  </ItemGroup>

...しかし、これは機能しません(「適用可能な最低バージョン」ルールがまだ適用されていると思います)。の代わりに使用して機能しますが、ソリューション内のすべてのプロジェクトにパッケージをインストールするだけです。IncludeUpdate

ビルド プロセスに何らかの「ポリシー」を提供して、更新されたバージョンを強制的に取得できるようにしたいと考えていますが、これを行う方法が見つかりませんでした。


注: 私の実際の例は、ここで概説したものよりも複雑です。BとはどちらCも広く使用されている Microsoft ASP.NET パッケージでありC、依存関係グラフの多数の場所に表示されます (私のアプリケーションはそのコードを直接参照することはありません)。

4

0 に答える 0