【问题标题】:Warn-as-error for MSB3277: Found conflicts between different versions of the same dependent assembly that could not be resolvedMSB3277 的错误警告:发现同一依赖程序集的不同版本之间存在无法解决的冲突
【发布时间】:2021-09-21 04:41:29
【问题描述】:

在我修复了这个警告之后,我怎样才能让它成为一个错误,这样它就不会再次滑入?

msbuild /p:TreatWarningsAsErrors 不起作用

【问题讨论】:

    标签: msbuild


    【解决方案1】:

    这里没有给你满意的答案。 TreatWarningsAsErrors 属性只影响 C# 和 VB.NET 编译器(不是 C++),它决定了它们的 /warnaserror 命令行选项的值。

    但是 MSB3277 是由 MSBuild 任务生成的,ResolveAssemblyReference,其内部 LogResult() 方法会生成诊断。该类唯一有助于有条件地将警告视为错误的属性是 WarnOrErrorOnTargetArchitectureMismatch,而不是您要实现的目标。您可以使用反编译器亲自查看,查看 C:\Program Files (x86)\MSBuild\12.0\Bin\Microsoft.Build.Tasks.v12.0.dll。本地化 MSB3277 消息的资源名称是“ResolveAssemblyReference.FoundConflicts”。

    因此,在这里取得成功的唯一方法是编写一个解析日志文件并查找警告的小实用程序。

    【讨论】:

      【解决方案2】:

      您可以使用通用机制MSBuildTreatWarningsAsErrors<MSBuildWarningsAsErrors>MSB3277</MSBuildWarningsAsErrors>(在#1928 中引入)来完成此操作。

      【讨论】:

        【解决方案3】:

        通过包管理器控制台运行 Update-Package,这将修复 MSB3277,它会重新安装所有包和所有相关程序集,以尽可能高的版本。

        更多关于官方文档的信息https://docs.microsoft.com/en-us/nuget/consume-packages/reinstalling-and-updating-packages

        【讨论】:

          【解决方案4】:

          看起来/warnaserror 会将所有msbuild 警告升级为错误:

          TreatWarningsAsErrors vs /warnaserror

          【讨论】:

            猜你喜欢
            • 2018-03-16
            • 2010-09-06
            • 2017-09-20
            • 2014-09-06
            • 2014-06-26
            • 2010-12-24
            • 1970-01-01
            相关资源
            最近更新 更多