Microsoft.Bcl.Build NuGet包有什么作用?

cri*_*mbo 75 .net nuget .net-4.5

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

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

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

从查看Microsoft.Bcl.Build.targets文件看,它看起来像管理绑定重定向和包引用.看起来某些功能仅在Visual Studio中运行时使用.

任何人都可以提供有关此软件包的更多信息吗? 这对我们的构建服务器环境来说很痛苦,完全从源代码构建时可以忽略它(例如构建服务器环境)吗?

cri*_*mbo 23

从查看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>
Run Code Online (Sandbox Code Playgroud)

这具有忽略CI环境中的目标但在开发环境中激活它们的净效果.我已经运行了一个多星期,到目前为止没有问题......

我仍然想知道是否有人在这个包装上有更好的信息表明这样做是个坏主意.到目前为止,我认为这是一个好主意.

编辑2018-02-01:

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

msbuild (targets, etc) /p:BclBuildImported=Ignore
Run Code Online (Sandbox Code Playgroud)

  • 为了更清楚地了解如何检查这一点,以下是我添加到 &lt;Target&gt; 和 &lt;Import&gt; 项的示例: 对于 &lt;Target&gt;: `Condition="$(BclBuildImported) != 'Ignore'"` 和对于 &lt;Import&gt;: `Condition="$(BclBuildImported) != 'Ignore' And Exists('$(SolutionDir)\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets') ”` (2认同)

Mat*_*ete 11

它基本上是针对较旧的软件包的一种方法,它针对较旧的.Net构建和编译,在新的.Net上没有任何问题

如果你去http://blogs.msdn.com/b/bclteam/p/bclbuild.aspx,你会看到两个链接到http://blogs.msdn.com/b/dotnet/archive/2013/11/的公告13/pcl-and-net-nuget-libraries-are-now-enabled-for-xamarin.aspxhttp://blogs.msdn.com/b/dotnet/archive/2013/08/12/improved-package- restore.aspx应该解释它.