如何诊断警告MSB3277:发现同一依赖程序集的不同版本之间的冲突无法解决



我在构建项目时收到一个烦人的MSB3277警告。我将详细程度增加到"详细",并且能够从日志中获取以下信息:

There was a conflict between "Pathoschild.Http.Client, Version=3.0.0.0, Culture=neutral, PublicKeyToken=null" and "Pathoschild.Http.Client, Version=3.1.0.0, Culture=neutral, PublicKeyToken=null".
"Pathoschild.Http.Client, Version=3.0.0.0, Culture=neutral, PublicKeyToken=null" was chosen because it was primary and "Pathoschild.Http.Client, Version=3.1.0.0, Culture=neutral, PublicKeyToken=null" was not.
References which depend on "Pathoschild.Http.Client, Version=3.0.0.0, Culture=neutral, PublicKeyToken=null" [C:Usersdesau.nugetpackagespathoschild.http.fluentclient3.0.0libnetstandard1.3Pathoschild.Http.Client.dll].
C:Usersdesau.nugetpackagespathoschild.http.fluentclient3.0.0libnetstandard1.3Pathoschild.Http.Client.dll
Project file item includes which caused reference "C:Usersdesau.nugetpackagespathoschild.http.fluentclient3.0.0libnetstandard1.3Pathoschild.Http.Client.dll".
C:Usersdesau.nugetpackagespathoschild.http.fluentclient3.0.0libnetstandard1.3Pathoschild.Http.Client.dll
References which depend on "Pathoschild.Http.Client, Version=3.1.0.0, Culture=neutral, PublicKeyToken=null" [].
C:Usersdesau.nugetpackagesstronggrid.30.0libnetstandard1.3StrongGrid.dll
Project file item includes which caused reference "C:Usersdesau.nugetpackagesstronggrid.30.0libnetstandard1.3StrongGrid.dll".
C:Usersdesau.nugetpackagesstronggrid.30.0libnetstandard1.3StrongGrid.dll

如果我正确理解了这个日志,它告诉我我的项目引用了Pathoschild.Http.Client版本3.0和版本3.1。我理解对版本 3.1 的引用,因为我的项目引用了一个名为 StrongGrid 的 nuget 包,该包本身引用了 Pathoschild 版本 3.1

但我不明白对 3.0 版的引用来自哪里。

我正在使用Visual Studio 2017和MSBuild 15,以防这是有用的信息。

此问题的原因是StrongGrid包的创作不正确。

StrongGrid的版本0.30是针对Pathoschild.Http.FluentClient的版本3.1.0构建的,但其用于创建 NuGet 包的.nuspec文件仍将版本3.0.0列为依赖项,因此使用项目将提取旧版本,从而产生无法解决的冲突。

若要变通解决此问题,可以通过向 csproj 文件添加包引用来替代版本,显式引用版本3.1.0Pathoschild.Http.FluentClient

最新更新