从Microsoft.Bcl.Build.targets
看,它有一系列项目配置目标,例如:
EnsureBindingRedirects
-确定哪些引用被 Select 用于绑定重定向,并更新应用程序.和他们在一起
BclBuildValidateNugetPackageReferences
-此目标验证当前项目中安装的任何Nuget软件包是否也在当前项目中安装了它们的依赖项(传递依赖项).
因此,基于此判断,我决定只有在开发环境中添加/删除/更新NuGet依赖项时才需要此功能;而在CI环境中可以忽略此功能,因为在CI环境中它会导致问题.
所以我想在我的*中保留依赖关系.csproj文件,但在运行CI生成时忽略它.为此,我在构建环境目标文件(例如builder.targets)上添加了一个条件导入,其中包括以下块:
<!-- Skip Microsoft.Bcl.Build functionality when building only from Source. -->
<PropertyGroup>
<BclBuildImported>Ignore</BclBuildImported>
</PropertyGroup>
这样做的净效果是忽略CI环境中的目标,但在开发环境中激活它们.我已经运行了一个多星期了,到目前为止没有问题...
我仍然很想知道是否有人有关于这个包的更好的信息,表明这样做不是一个好主意.到目前为止,我认为这是个好主意.
Edit 2018-02-01:
请注意,也可以在命令行上传递ignore参数,以跳过Microsoft.Bcl.Build.targets
逻辑:
msbuild (targets, etc) /p:BclBuildImported=Ignore