我找不到任何关于这方面的文档-Microsoft.Bcl.Build Nuget page的链接没有提供太多帮助:

此软件包提供构建基础 struct 组件,以便引用特定Microsoft软件包的项目可以成功构建.

除非收到指示您添加引用的生成警告,否则不要直接引用此包.

Microsoft.Bcl.Build.targets文件来看,它似乎管理绑定重定向和包引用.看起来有些功能只在Visual Studio中运行时使用.

有没有人能提供更多关于这个包做什么的信息?It's a pain in our build server environment,当完全从源代码构建(例如构建服务器环境)时,可以忽略它吗?

推荐答案

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

.net相关问答推荐

Docker镜像mcr.microsoft.com/dotnet/aspnet:8.0不能在Windows上构建

在 C# 中,如何使用泛型的基类将泛型接口的所有实例注入到单个构造函数中?

无法解析此引用.找不到程序集

为什么这个多态 C# 代码会打印它的功能?

从 byte[] 创建 zip 文件

如何使用 C# 中的代码更改网络设置(IP 地址、DNS、WINS、主机名)

C# 是否(或将)包含用于副作用验证的功能?

编译错误:显式实现接口时修饰符 'public' 对此项目无效

struct 中需要覆盖什么以确保平等正常运行?

为什么字典比列表快得多?

大型 WCF Web 服务请求因 (400) HTTP 错误请求而失败

我们应该总是在类中包含一个默认构造函数吗?

如何允许程序集(单元测试)访问另一个程序集的内部属性?

单元测试 C# 保护方法

如何在 WPF 中的 Xaml 文件中添加注释?

为什么甚至可以更改私有成员,或使用反射在 C# 中运行私有方法?

如何判断uri字符串是否有效

判断任意字符串是否为有效文件名的最简单方法

在 C# 中转义无效的 XML 字符

可以从 C# 调用 C++ 代码吗?