【问题标题】:How to bypass Microsoft.Bcl.Build warning如何绕过 Microsoft.Bcl.Build 警告
【发布时间】:2017-01-05 11:42:55
【问题描述】:

我有一个包含多个项目的解决方案,其中一个项目的构建警告显示

所有引用 Project.csproj 的项目都必须安装 nuget 包 Microsoft.Bcl.Build

我想摆脱这个警告,因为我们将应用干净的构建方法进行构建集成,其中所有警告都将被视为错误。因此,在推送到会触发 CI 构建的远程存储库之前,应清除所有警告和错误,并且在主构建中合并需要成功。

如何删除/抑制/绕过此特定警告?

【问题讨论】:

  • 您是否尝试过按照警告中的说明在这些项目中安装上述 nuget 包?
  • 是的,然后警告会传播到其他项目,并且所有项目都显示此警告。如果没有它一切正常,我为什么要安装它?
  • 是的,我们将警告视为错误以保持干净的解决方案并最多遵循最佳编码实践。这是否意味着我们需要安装一个与应用程序架构、业务或任何相关内容无关的包?拥有该软件包必须有理由,并且通过谷歌搜索我没有找到任何直接的答案。
  • 如果是这样,你真的需要它吗?您是否尝试过完全删除引用?
  • 既然你已经解决了这个问题,请发表一个答案,并将其标记为答案,这将有利于其他社区。​​span>

标签: c# visual-studio msbuild


【解决方案1】:

我已通过完全删除所有 Microsoft.Bcl 解决了这个问题 和 Microsoft.Bcl.Build 在 cmets 中建议的 @nozzleman 引用。

虽然解决方案资源管理器中的 References 列表中不存在 dll 引用,但 package.config 中有以下两个包的条目:

<package id="Microsoft.Bcl" version="1.1.10" targetFramework="net461" />
<package id="Microsoft.Bcl.Build" version="1.0.14" targetFramework="net461" />

我在完整的解决方案中搜索了 Microsoft.BclMicrosoft.Bcl.Build 术语,并从 packages.config 中删除了所有这些条目以及来自具有如下条目的 .csproj 文件:

<Import Project="..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />
  <Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
    <Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" />
    <Error Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />
  </Target>

这些行是在之前安装时附加的,当有人通过按 Delete 键手动删除引用时,它们并没有被删除。

从各处清除这两个项目后,警告从构建中消失了。

【讨论】:

    【解决方案2】:

    如何删除/抑制/绕过此特定警告?

    您可以添加一个名为 Properties 且值为 SkipValidatePackageReferences=true 的参数,以禁用尚不支持 Nuget 的项目的项目引用,这是安全的。像这样:

    <ItemGroup>
        <ProjectReference Include="..\MyProject\Project.csproj">
          <Name> Project</Name>
          <Project>{77ACF4A4-5F19-40E9-991D-BDB09B175366}</Project>
          <Private>True</Private>
          <RoleType>Web</RoleType>
          <RoleName>MyProject</RoleName>
          <UpdateDiagnosticsConnectionStringOnPublish>True</UpdateDiagnosticsConnectionStringOnPublish>
          <Properties>SkipValidatePackageReferences=true</Properties>
        </ProjectReference>
      </ItemGroup>
    

    【讨论】:

    • SkipValidatePackageReferences 应用于 ProjectReference,因此不会为引用的项目验证其他 NuGet 包引用。这似乎太宽泛了,因为应该正确地验证其他包,不是吗?我想这就是为什么您和其他许多人都清楚地声明:“尚不支持 Nuget 的项目”。但是,通过将此解决方法限制为仅在“尚不支持 NuGet 的项目”时,它并不能解决具有其他包引用的项目仍会呈现编译器警告的事实。
    • 我不建议这样做,因为如果同一项目的另一个引用没有相同的属性,它可能会导致您的程序集被重建。导致问题子代码分析和检测
    【解决方案3】:

    在我的情况下,我遇到了同样的错误,但事实证明我应该修复 proj 文件中包的路径。我将其更改为: ..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets

    ..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets
    

    只是这个包是第一个包,由于包路径不正确,构建失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-23
      • 1970-01-01
      • 2022-08-16
      • 2021-11-01
      • 1970-01-01
      • 2012-03-19
      • 2012-08-03
      • 1970-01-01
      相关资源
      最近更新 更多