【问题标题】:.NET Core - MSB3277: Found conflicts between different versions.NET Core - MSB3277:发现不同版本之间存在冲突
【发布时间】:2022-02-19 00:20:05
【问题描述】:

我很难摆脱构建警告:

warning MSB3277: Found conflicts between different versions of the same dependent assembly that could not be resolved

特别是在 .NET 核心项目中。

在一个完整的 .NET 框架项目中,我会添加一些绑定重定向,因此我搜索了该问题并发现 this answer 建议将以下内容添加到 .csproj 文件中:

<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

我已经这样做了,但无济于事 - 我仍然收到构建警告。我还能做什么?

【问题讨论】:

  • 请至少分享您的项目文件和解决方案设置的相关部分。 (仅供参考 .NET Core 没有绑定重定向)
  • @MartinUllrich 感谢您的回复 - 您希望从 proj 文件中看到什么?有问题的项目是here。我真的很难理解依赖程序集如何在没有它的情况下在 .net 核心中被重定向?还有其他一些我不知道的机制吗?
  • 实际上-有问题的分支是this one

标签: c# msbuild .net-core dotnet-cli


【解决方案1】:

我查看了您的项目,问题似乎与构建 Rssdp 所针对的版本以及引用的 System.Net.Http 版本 (4.3.0) 作为编译时参考提供的程序集版本冲突.

这可以通过将System.Net.Http 更新为4.3.2 来解决。

<PackageReference Include="System.Net.Http" Version="4.3.2"/>

【讨论】:

  • 很好,但我还是不明白! :-) Rssdp 引用了
  • NuGet 包版本与程序集版本不同,在完整框架上使用时,它们的版本控制方案和冲突解决存在问题..
  • 我不太明白,但这绝对不是你的问题! :-) 非常欢迎任何有关背景阅读的建议,但无论哪种方式,我都非常感谢您在解决问题方面的帮助。谢谢
【解决方案2】:

通过包管理器控制台运行更新包,这将修复 MSB3277,它会重新安装所有最高版本的包。

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

【讨论】:

  • 我不知道该怎么做。该参考说 “对于 dotnet CLI,不需要等效过程。在类似的情况下,您可以使用 dotnet CLI 恢复包。” 我的构建服务器没有 GUI,dotnet restore 是应该在构建过程中自动完成。
  • 你的项目是 .Net Core 2.0+ 吗?您是在构建服务器上还是在本地遇到这个问题? Update-Package 是数据包管理器 cli 命令,它是 nugget 数据包管理器的一部分,应该在构建服务器上可用。
  • 是的,它是 .Net Core 2.2.7。我不确定Update-package 是否可用,但该参考表明我不应该使用它,因为我的构建服务器正在使用 dotnet CLI。
  • 显然,自从发布此答案以来,过去 2 年情况发生了变化,它声明它不是必需的,并不是说它不能或不应该使用。你可以控制你的构建服务器吗?您遇到的确切问题是什么,您的构建服务器是否由于 nuget 包版本冲突而无法构建解决方案?
【解决方案3】:

我有同样的问题。在其中一个项目上收到了几个警告。我从解决方案级别更新了所有软件包,警告消失了。 我使用 Visual Studios for Mac 来更新包。 右键单击解决方案,然后更新 Nuget 包。

【讨论】:

    【解决方案4】:

    你们中的任何依赖项都使用&lt;PrivateAssets&gt;吗?

    如果项目 A 有一个私有引用,并且私有引用和另一个引用都需要某个包 X,但私有引用需要更高版本的包 X,那么项目 A 的程序集也将需要更高版本的包X。 但是,您最终会遇到任何其他项目的情况,例如引用项目 A 的项目 B 只会将包 X 的较低版本视为依赖项 - 因此选择要复制到输出目录的包 X 程序集的较低版本。好消息是,这个 DLL-HELL 在构建时被检测到,它发现程序集 projectA.dll 需要一个与已指定为主项目不同的 projectX.dll,因此它记录了一些关于 packageX 需要的非常无用的输出本身,这没有任何意义......并放弃了构建。

    【讨论】:

      猜你喜欢
      • 2018-02-25
      • 2014-01-25
      • 1970-01-01
      • 2018-03-16
      • 2020-02-05
      • 2013-05-22
      • 2010-09-06
      • 1970-01-01
      相关资源
      最近更新 更多