.NET Core - MSB3277: 发现不同版本之间的冲突

6

我遇到了一个困难,就是如何消除构建警告:

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

特别是在.NET Core项目中。

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

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

我已经尝试过这个方法,但是无济于事 - 我仍然收到构建警告。还有其他办法吗?

请分享您项目文件和解决方案设置的相关部分。(注意:.NET Core没有绑定重定向功能) - Martin Ullrich
@MartinUllrich 感谢您的回复 - 您希望从proj文件中看到什么?有关该项目的信息在此处。我真的很难理解在没有它的情况下,如何在.net core中重定向依赖程序集?是否有其他机制我不知道 - 我已经搜索了很多次,但没有结果。 - Stewart_R
实际上,涉及的分支是这个 - Stewart_R
4个回答

6

我查看了你的项目,问题似乎与Rssdp构建版本冲突以及引用System.Net.Http的程序集版本(编译时引用版本为4.3.0)有关。

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

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

好的,这个方法可以用,但我还是不太明白! :-) Rssdp 引用了一个版本小于 4.3.2 的依赖项,另一个依赖项也引用了一个版本小于 4.3.2 的依赖项,但如果我显式地引用一个比这两个版本都高的版本,.net core 会自动解决它吗?无论如何,非常感谢您的帮助!谢谢 - Stewart_R
NuGet包版本与程序集版本不相似,当在完整框架上使用时,它们的版本控制方案和冲突解决存在问题。 - Martin Ullrich
1
我并不是很理解,但这绝对不是你的问题! :-) 如果有关于这方面的背景阅读建议,非常欢迎,但无论如何,感谢您帮助解决这个问题。谢谢。 - Stewart_R

0

我不确定该怎么做。该参考文献说:“对于dotnet CLI,不需要等效的过程。在类似的情况下,您可以使用dotnet CLI还原包。”我的构建服务器没有GUI界面,并且应该自动使用构建来执行“dotnet restore”。 - Auspex
你的项目是 .Net Core 2.0+ 吗?同时,你是否在构建服务器或本地遇到了这个问题? Update-Package 是包管理器 CLI 命令,它是 nugget 包管理器的一部分,并且应该在构建服务器上可用。 - Aistis Taraskevicius
是的,它是 .Net Core 2.2.7。我不确定 Update-package 是否可用,但是那个参考资料说我 不应该 使用它,因为我的构建服务器正在使用 dotnet CLI。 - Auspex
显然,自这个答案发布以来的过去两年中发生了变化,它表明它不是必需的,而不是不能或不应该使用。您是否控制您的构建服务器? 您遇到的确切问题是什么?您的构建服务器是否由于冲突的NuGet软件包版本无法构建解决方案? - Aistis Taraskevicius

0

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


0

你们的任何依赖项使用了<PrivateAssets>吗?

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接