如何抑制“发现不同版本的警告之间存在冲突”?

时间:2019-01-27 00:09:43

标签: .net visual-studio msbuild visual-studio-2017 visual-studio-express

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

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

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

  

发现不同版本的“ AssemblyA”之间可能存在冲突   无法解决。这些参考冲突在构建中列出   将日志详细程度设置为“详细”时记录日志。

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

  

“ AssemblyA,版本= 6.7.6643.0”与   “ AssemblyA,版本= 7.0.0.0”。           选择了“ AssemblyA,版本= 6.7.6643.0”,因为它是主要版本,而不是“ AssemblyA,版本= 7.0.0.0”。           依赖于“ AssemblyA,版本= 6.7.6643.0” [AssemblyA.dll]的引用。               AssemblyA.dll                 项目文件项包括引起引用“ AssemblyA.dll”的文件。                   AssemblyA,版本= 6.7.6643.0           依赖于“ AssemblyA,版本= 7.0.0.0” []的引用。               AssemblyB.dll                 项目文件项包括引起引用“ AssemblyB.dll”的文件。                   AssemblyB,版本= 7.0.0.0               AssemblyC.dll                 项目文件项包括引起引用“ AssemblyC.dll”的文件。                   AssemblyC,版本= 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,它将导致警告消失。但是正如我之前所说,由于其他无法控制的原因,我现在无法升级此程序集。

是否仅针对该特定实例抑制该警告?

谢谢

2 个答案:

答案 0 :(得分:2)

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

例如..

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

答案 1 :(得分:0)

1。当编译器编译项目时,似乎会出现此警告,它将对使用哪个版本的.dll感到困惑,从而引发MSB3277警告。通常,我们可以通过升级旧版本或降级新版本来解决此警告。但是在这种情况下,似乎没有解决此警告的有效方法。

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

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

因此,恐怕我们目前没有有效的方法来抑制MSB3277。很抱歉给您带来不便。