我找不到这方面的任何文档 - Microsoft.Bcl.Build Nuget page 中的链接没有提供太多帮助:
此包提供构建基础结构组件,以便可以成功构建引用特定 Microsoft 包的项目。除非您收到指示您添加引用的构建警告,否则不要直接引用此包。
通过查看 Microsoft.Bcl.Build.targets
文件,它看起来像是管理绑定重定向和包引用。看起来只有在 Visual Studio 中运行时才使用其中的某些功能。
任何人都可以提供有关此软件包功能的更多信息吗? It's a pain in our build server environment,完全从源代码构建(例如构建服务器环境)时可以忽略它吗?
从 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:
请注意,也可以在命令行上传递忽略参数,以跳过 Microsoft.Bcl.Build.targets
逻辑:
msbuild (targets, etc) /p:BclBuildImported=Ignore
它基本上是针对旧 .Net 的旧包在新 .Net 上构建和编译而没有问题的一种方式
如果您转到 http://blogs.msdn.com/b/bclteam/p/bclbuild.aspx,您将看到两个链接到 https://devblogs.microsoft.com/dotnet/pcl-and-net-nuget-libraries-are-now-enabled-for-xamarin/ 和 https://devblogs.microsoft.com/dotnet/improved-package-restore/ 的公告,应该解释它。
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)
,你能详细说明一下吗?Condition="$(BclBuildImported) != 'Ignore'"
和<Import>:Condition="$(BclBuildImported) != 'Ignore' And Exists('$(SolutionDir)\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')"