【问题标题】:What does the Microsoft.Bcl.Build NuGet package do?Microsoft.Bcl.Build NuGet 包有什么作用?
【发布时间】:2014-04-02 23:06:43
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: .net nuget .net-4.5


    【解决方案1】:

    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
    

    【讨论】:

    • 没看懂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),能详细点吗?
    • 我需要保留对 Microsoft.Bcl.Build 的项目引用,以便在开发期间/在 Visual Studio 中使用它。该逻辑在依赖项更新期间运行。但是由于在构建服务器上运行它时出现问题,我想在构建服务器构建期间禁用它。
    • 为了更清楚地了解如何检查这一点,这是我添加到 项目的示例:对于 Condition="$(BclBuildImported) != 'Ignore'" 和对于 Condition="$(BclBuildImported) != 'Ignore' And Exists('$(SolutionDir)\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')"
    • 我还发现这是我的遗留代码遗留下来的一个愚蠢的东西,需要 .nuget\something.targets
    【解决方案2】:

    这基本上是一种针对旧 .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/ 的公告,应该可以解释它。

    【讨论】:

      猜你喜欢
      • 2015-03-19
      • 2018-04-30
      • 2013-06-15
      • 1970-01-01
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      相关资源
      最近更新 更多