C# .net标准项目在运行时引用了不兼容的nuget包版本

C# .net标准项目在运行时引用了不兼容的nuget包版本,c#,.net-core,nuget,xunit,.net-standard,C#,.net Core,Nuget,Xunit,.net Standard,我在.NETCore2.0项目中的一个NuGet依赖项出现运行时问题 我对NuGet包B有依赖关系,它依赖于NuGet包a。NuGet包B是一个多目标包,具有以下依赖关系图: Package B -- netstandard1.3 -- package A 1.0 -- netstandard 2.0 -- package A 2.0 -- net452 -- package A 1.0 -- net461 -- package A 2.0

我在.NETCore2.0项目中的一个NuGet依赖项出现运行时问题

我对NuGet包B有依赖关系,它依赖于NuGet包a。NuGet包B是一个多目标包,具有以下依赖关系图:

Package B
  -- netstandard1.3
     -- package A 1.0
  -- netstandard 2.0
     -- package A 2.0
  -- net452
     -- package A 1.0
  -- net461
     -- package A 2.0
这是我的问题:我将NuGet包B作为.NET标准2.0包使用,当我通过Visual Studio 2017测试运行程序运行时,一切都可以正常编译,我的所有XUnit规范都可以通过

但是,当我在CLI或构建服务器上运行XUnit时,我们会得到一堆
MissingMethodException
s,它们都指向运行时引用的
PackageA1.0
,而不是
PackageB2.0


关于这个问题有什么想法吗?尝试了将
包B
版本锁定到
[2.0]
的所有常规步骤,但没有起到任何作用。

我找到了答案。问题在于XUnit 2.3.0—当规范运行
dotnet XUnit
命令时,该过程作为.NET Core 2.0以外的某个目标执行,因此,为什么要使用包的较低框架版本


升级到XUnit 2.3.1修复了该问题-该测试现在作为.NET Core 2.0规范正确执行,并加载基础依赖项的正确版本。

是否尝试过清理和重建?并不是说输出目录中存在一些错误的包并且不会被替换。至少您应该深入查看CI代理计算机上的MSBuild/dotnet日志,以查看生成是如何准确执行的。仅仅发布上述信息是没有用的。@dsdel是的,没有任何影响。@LexLi不是一个有用的评论。为什么要麻烦发布无用的slop,比如“检查日志?”此外,构建服务器日志和dotnet还原日志也没有帮助。它们显示了正在恢复的正确NuGet包版本,但没有提供任何关于正在使用的目标框架版本的指示。我在我的规范中添加了一些调试日志记录,它表明使用了包A的下一版本1.0,而不是2.0。正如我在文章中所描述的。虽然你可能幸运地找到了解决方案,但你的发帖风格就像一个人秀。只有你自己才能看到这些项目,因此如果你没有发布足够的信息让其他人复制(日志文件等),问题本身的质量就很低