如何抑制 'Found conflicts between different versions of' 警告?

How to suppress 'Found conflicts between different versions of' warning?

在一个项目中我有以下参考布局:

References
+- AssemblyA 6.7.6643.0
+- AssemblyB
|  \- AssemblyA 7.0.0.0
\- AssemblyC
   \- AssemblyA 7.0.0.0

AssemblyB 和 AssemblyC 是没有降级的 NuGet 引用。由于我无法控制的情况,升级 AssemblyA 不是一种选择。但我收到此警告:

Found conflicts between different versions of "AssemblyA" that could not be resolved. These reference conflicts are listed in the build log when log verbosity is set to detailed.

所以我就这样做了,这是输出:

There was a conflict between "AssemblyA, Version=6.7.6643.0" and "AssemblyA, Version=7.0.0.0". "AssemblyA, Version=6.7.6643.0" was chosen because it was primary and "AssemblyA, Version=7.0.0.0" was not. References which depend on "AssemblyA, Version=6.7.6643.0" [AssemblyA.dll]. AssemblyA.dll Project file item includes which caused reference "AssemblyA.dll". AssemblyA, Version=6.7.6643.0 References which depend on "AssemblyA, Version=7.0.0.0" []. AssemblyB.dll Project file item includes which caused reference "AssemblyB.dll". AssemblyB, Version=7.0.0.0 AssemblyC.dll Project file item includes which caused reference "AssemblyC.dll". AssemblyC, Version=9.0.0.0

它选择了我想要的版本,但我仍然在 Visual Studio 中收到警告。所以我更新了 app.config 绑定重定向,希望它能摆脱警告:

<dependentAssembly>
  <assemblyIdentity name="AssemblyA" publicKeyToken="..." culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="6.7.6643.0" />
</dependentAssembly>

但警告仍然存在。我已经确认,如果我将 AssemblyA 升级到 7.0.0.0,它会导致警告消失。但正如我之前所说,由于我无法控制的其他原因,我现在无法升级此程序集。

有没有办法仅针对这一特定实例抑制此警告?

谢谢

1.This 编译器在编译项目时似乎出现了警告,它会混淆使用哪个版本的.dll,从而抛出MSB3277 警告。通常,我们可以通过升级旧版本或降级新版本来解决此警告。但在这种情况下,似乎没有有效的方法来解决这个警告。

2.What更多,有时我们可以通过设置一些属性来抑制警告,但这似乎不适用于 MSB 警告,因为带有 MSB 前缀的警告由 MSBuild 抛出并且没有当前抑制 MSB 警告的有效方法。

特别是对于 MSB3277,我在 proj 中通过 nowarn、#pargma、属性 使用 vs2017 进行了测试,但不幸的是,它不起作用。 我们可以在这里找到类似的问题:How to suppress specific MSBuild warning Suppress MSB4126

所以,恐怕我们目前没有有效的方法来抑制MSB3277。对于给您带来的不便,我们深表歉意。

实际上,有一种方法可以通过编辑 .csproj 将警告视为消息来抑制 MSBuild 更新版本的 MSBuild 警告。

例如..

<PropertyGroup> 
  <MSBuildWarningsAsMessages>
    $(MSBuildWarningsAsMessages);MSB3274;MSB3275;MSB3268
  </MSBuildWarningsAsMessages>
</PropertyGroup>