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

des*_*lsj 7 c# msbuild visual-studio

我在构建项目时收到一个恼人的 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:\Users\desau\.nuget\packages\pathoschild.http.fluentclient\3.0.0\lib\netstandard1.3\Pathoschild.Http.Client.dll].
             C:\Users\desau\.nuget\packages\pathoschild.http.fluentclient\3.0.0\lib\netstandard1.3\Pathoschild.Http.Client.dll
               Project file item includes which caused reference "C:\Users\desau\.nuget\packages\pathoschild.http.fluentclient\3.0.0\lib\netstandard1.3\Pathoschild.Http.Client.dll".
                 C:\Users\desau\.nuget\packages\pathoschild.http.fluentclient\3.0.0\lib\netstandard1.3\Pathoschild.Http.Client.dll

         References which depend on "Pathoschild.Http.Client, Version=3.1.0.0, Culture=neutral, PublicKeyToken=null" [].
             C:\Users\desau\.nuget\packages\stronggrid\0.30.0\lib\netstandard1.3\StrongGrid.dll
               Project file item includes which caused reference "C:\Users\desau\.nuget\packages\stronggrid\0.30.0\lib\netstandard1.3\StrongGrid.dll".
                 C:\Users\desau\.nuget\packages\stronggrid\0.30.0\lib\netstandard1.3\StrongGrid.dll
Run Code Online (Sandbox Code Playgroud)

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

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

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

Mar*_*ich 5

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

该版本0.30StrongGrid建成对版本3.1.0Pathoschild.Http.FluentClient,但它们的.nuspec用于创建NuGet包仍列出的版本文件3.0.0的依赖性,所以消费项目将获取的旧版本,创建解决不了的冲突。

要解决这个问题,你可以明确的参考版本3.1.0Pathoschild.Http.FluentClient加入了包参考的csproj文件覆盖的版本。