Microsoft.Bcl.Build NuGet包做什么?


82

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

该软件包提供了构建基础结构组件,以便引用特定Microsoft软件包的项目可以成功构建。

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

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

谁能提供有关此软件包功能的更多信息? 这在我们的构建服务器环境中很痛苦,如果完全从源代码构建(例如,构建服务器环境),可以忽略它吗?

Answers:


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环境中的目标,但在开发环境中激活它们。我已经运行了一个多星期,到目前为止没有任何问题。

我仍然很想知道是否有人对这个软件包有更好的信息,表明这样做不是一个好主意。到目前为止,我认为这是个好主意。

编辑2018-02-01:

请注意,ignore参数也可以在命令行上传递,以跳过Microsoft.Bcl.Build.targets逻辑:

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

我需要保留对Microsoft.Bcl.Build的项目引用,以便可以在开发过程中/在Visual Studio中使用它。该逻辑在依赖项更新期间运行。但是由于在构建服务器上运行它时出现问题,我想在构建服务器期间禁用它。
crimbo

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
Auri Rahimzadeh,

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.