Microsoft.Bcl.Build NuGetパッケージは何をしますか?


83

これに関するドキュメントが見つかりません-Microsoft.Bcl.BuildNugetページからのリンクはあまり役に立ちません:

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

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

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

誰かがこのパッケージが何をするかについてもっと情報を提供できますか? ビルドサーバー環境では苦痛ですが、ソースコードから完全にビルドする場合(ビルドサーバー環境など)は無視できますか?

回答:


26

を見ると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ロジックをスキップするために、ignoreパラメーターをコマンドラインで渡すこともできることに注意してください。

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

よくわかりませんでしたSo I want to keep the dependency in my *.csproj files, but ignore it. I did that by adding a conditional import on a build environment targets file (eg builder.targets)が、詳しく教えていただけますか?
JobaDiniz 2018年

開発中/ Visual Studio内で使用できるように、プロジェクト参照をMicrosoft.Bcl.Buildに保持する必要がありました。ロジックは、依存関係の更新中に実行されます。しかし、ビルドサーバーでの実行に問題があるため、ビルドサーバーのビルド中に無効にしたかったのです。
クリンボ2018

1
これを確認する方法をより明確にするために、<Target>および<Import>アイテムに追加したものの例を次に示します。<Target>の場合:Condition="$(BclBuildImported) != 'Ignore'"および<Import>の場合:Condition="$(BclBuildImported) != 'Ignore' And Exists('$(SolutionDir)\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')"
Auri Rahimzadeh

また、これは.nuget \ something.targetsを必要とするレガシーコードから残されたばかげたものであることがわかりました
AuriRahimzadeh19年

15

これは基本的に、古い.Netを対象とした古いパッケージが、新しい.Netで問題なくビルドおよびコンパイルするための方法です。

あなたがに行く場合http://blogs.msdn.com/b/bclteam/p/bclbuild.aspx次の2件の発表がへのリンクが表示されますhttps://devblogs.microsoft.com/dotnet/pcl-and-net-nuget-それを説明する必要があるlibrary-are-now-enabled-for-xamarin /およびhttps://devblogs.microsoft.com/dotnet/improved-package-restore/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.