1. ホーム
  2. .net

[解決済み] Microsoft.Bcl.Build NuGet パッケージは何をするのですか?

2023-04-19 21:24:52

質問

これに関するドキュメントを見つけることができません。 Microsoft.Bcl.Build Nuget ページからのリンク。 からのリンクは、あまり助けを提供しません。

このパッケージは、特定の Microsoft パッケージを参照するプロジェクトが正常にビルドできるように、ビルドインフラストラクチャコンポーネントを提供します。

参照を追加するように指示するビルド警告が表示されない限り、このパッケージを直接参照しないでください。

を見る限りでは Microsoft.Bcl.Build.targets ファイルを見ると、バインディング リダイレクトとパッケージ参照を管理しているように見えます。 この機能の一部は、Visual Studio で実行する場合にのみ使用されるように見えます。

このパッケージが何をするかについて、どなたかもっと情報を提供していただけないでしょうか。 ビルドサーバー環境では面倒なのですが ソースコードから完全にビルドする場合 (たとえばビルドサーバー環境)、このパッケージを無視することはできますか?

どのように解決するのですか。

を見る限り Microsoft.Bcl.Build.targets を見ると、プロジェクトの構成ターゲットの束を持っています。

  • EnsureBindingRedirects - どの参照がバインディング・リダイレクトに最適化されているかを判断し、それらでapp.configを更新します。
  • BclBuildValidateNugetPackageReferences - このターゲットは、現在のプロジェクトにインストールされたすべてのNugetパッケージが、その依存関係(推移的依存関係)も現在のプロジェクトにインストールされていることを検証します。

この評価に基づいて、この機能は開発環境で NuGet の依存関係を追加/削除/更新する場合にのみ必要であり、問題を引き起こしている CI 環境では無視してもよいと判断したわけです。

そこで、私は依存関係を私の*.csprojファイルに保持したいのですが、CIビルドを実行するときにそれを無視します。 私は、このブロックを含むビルド環境ターゲット ファイル (例: builder.targets) に条件付きインポートを追加することによって、それを行いました。

<!-- Skip Microsoft.Bcl.Build functionality when building only from Source. -->
<PropertyGroup>
  <BclBuildImported>Ignore</BclBuildImported>
</PropertyGroup>

これは、CI環境ではターゲットを無視し、開発環境ではターゲットを有効にするという正味の効果があります。 これを1週間以上実行していますが、今のところ問題はありません...。

私は、これを行うことが悪い考えであることを示す、このパッケージに関するより良い情報を誰かが持っているなら、それを知りたいです。 今のところ、私は良いアイデアだと考えています。

2018-02-01を編集しました。

無視パラメータはコマンドラインでも渡すことができることに注意してください。 Microsoft.Bcl.Build.targets のロジックをスキップすることができます。

msbuild (targets, etc) /p:BclBuildImported=Ignore