問題タブ [packagereference]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
1316 参照

.net-core - 推移的な nuget パッケージの依存関係を強制的に更新する最良の方法は?

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

パッケージは、バージョン制約付きで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、ソリューション全体でバージョンを強制的に更新しようとしました。

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

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


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

0 投票する
1 に答える
2689 参照

c# - PackageReference が ExcludeAssets = "runtime" および PrivateAssets = "none" で dll をコンシューマー (テスト) プロジェクト出力にコピーしない

ここでの簡単なセットアップ:

  • プロジェクト A - .NET 4.7.2 フレームワーク ライブラリ プロジェクト
    • SeriLog 2.9.0 へのパッケージ参照
      • ExcludeAssets="ランタイム",
      • PrivateAssets="none"、デフォルトでは DLL をコピーする必要があるため、これはオプションです (設定 = "runtime")
  • TestProject B - .NET 4.7.2 フレームワーク単体テスト プロジェクト
    • プロジェクト A が ProjectReference として追加されます
    • SeriLog DLL とすべての依存関係をここにコピーする必要があります

出力: SeriLog DLLProjectAの出力フォルダーにコピーされず、 TestProject Bにもコピーされません。私の観点からすると、TestProjectB にはSeriLog.dllが含まれているはずです。何か不足していますか?またはそれを達成するための他のオプションはありますか?

備考: PackageReference format specification から理解した限りでは、属性を正​​しく使用しています。

ExcludeAssets属性は、それが定義されているプロジェクトのアセットを制御しますPrivateAssetsは、プロジェクト A を使用しているプロジェクトへのフローを制御します。