From looking at Microsoft.Bcl.Build.targets
, it has a bunch of project configuration targets, eg:
EnsureBindingRedirects
- Determine which references are opted in for binding redirects, and update the app.config with them
BclBuildValidateNugetPackageReferences
- This target validates that any Nuget packages installed in the current project also have their dependencies (transitive dependencies) installed in the current project.
So based on this evaluation, I decided that this functionality is only needed in a dev environment, when adding/removing/updating NuGet dependencies; and that it could be ignored in a CI environment, where it's causing problems.
So I want to keep the dependency in my *.csproj files, but ignore it when running a CI build. I did that by adding a conditional import on a build environment targets file (eg builder.targets), which includes this block:
<!-- Skip Microsoft.Bcl.Build functionality when building only from Source. -->
<PropertyGroup>
<BclBuildImported>Ignore</BclBuildImported>
</PropertyGroup>
This has the net effect of ignoring the targets in a CI environment, but activating them in a development environment. I've had this running for over a week, and no problems so far...
I'd still love to know if anyone has better information on this package that indicates that doing this is a bad idea. So far I'm of the opinion that it's a good idea.
Edit 2018-02-01:
Note that the ignore parameter can also be passed on the command-line, to skip the Microsoft.Bcl.Build.targets
logic:
msbuild (targets, etc) /p:BclBuildImported=Ignore
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…