微软.Bcl.Build NuGet包是做什么用的?

90

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

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

除非您收到一个构建警告,指示您添加引用,否则请勿直接引用此软件包。

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

有人能否提供有关此软件包所做的更多信息?它在我们的构建服务器环境中很麻烦,在完全从源代码(例如构建服务器环境)构建时可以忽略吗?

2个回答

31

从查看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

我并不完全理解“因此,我想在我的 *.csproj 文件中保留依赖关系,但是忽略它。我通过在构建环境目标文件(例如 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

18

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接