Appveyor,测试引用了错误的程序集版本

Appveyor, test reference the wrong assembly version

A​​ppveyor 平台的新手,所以这可能只是我的天真。我将我的项目设置为从我的 GitHub 存储库构建。这似乎有效,除了测试。代码主要是 .Net 4.0,因为它支持遗留项目——我目前无法将它移动到更高版本的框架。因为这个项目已经在使用 Newtonsoft.Json,所以我不得不使用一个特定的版本。所有代码和测试 运行 本地。但是,一旦我设置了 CI(并开始着手进行 Nuget 恢复),我的测试仍然完全失败。他们没有做任何引人注目的事情。错误非常简单——Nuget 正在引入版本 6.0.8,但测试的构建过程希望根据输出引用 8.0.0.0:

Discovering tests...OK vstest.console /logger:Appveyor "C:\projects\debuginterface\Ratcow.Debugging.Server.Tests\bin\Debug\Ratcow.Debugging.Server.Tests.dll" Microsoft (R) Test Execution Command Line Tool Version 15.0.26228.0 Copyright (c) Microsoft Corporation. All rights reserved. Starting test execution, please wait... Failed BasicTest_ValueTypes Error Message: Test method Ratcow.Debugging.Server.Tests.MainUnitTest.BasicTest_ValueTypes threw exception: System.IO.FileLoadException: Could not load file or assembly 'Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) ---> System.IO.FileLoadException: Could not load file or assembly 'Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) Stack Trace: at Ratcow.Debugging.Server.DebugInterface.InstanceAsString(Object value) at Ratcow.Debugging.Server.DebugInterface.GetVariableValue(String variableName) in C:\projects\debuginterface\Ratcow.Debugging.Server\DebugInterface.cs:line 104 at Ratcow.Debugging.Server.Tests.MainUnitTest.BasicTest_ValueTypes() in C:\projects\debuginterface\Ratcow.Debugging.Server.Tests\MainUnitTest.cs:line 35

我可以接受这可能是正确的 - 除了代码引用 6.0.8,packages.config :

<?xml version="1.0" encoding="utf-8"?>
 <packages>
     <package id="MSTest.TestAdapter" version="1.1.11" targetFramework="net452" />
     <package id="MSTest.TestFramework" version="1.1.11" targetFramework="net452" />
     <package id="Newtonsoft.Json" version="6.0.8" targetFramework="net40" />
</packages>

有什么想法吗?最后一次启用测试的失败构建是 here。它正在愉快地构建,并且正在 运行 在多台台式机和笔记本电脑上的 VS2017 上进行测试。

好吧,感谢 Jeroen 上面的提示(我本来打算试试这个,但我没有时间在发布这个问题之前),答案有两个:

  1. 这不是特定于 Appveyor 的。如果我 运行 vstest.console.exe 直接在编译的测试项目上,我的测试也会因为完全相同的原因而失败。这是我解决问题的重要部分,重新​​创建问题始终是解决问题的最大部分。
  2. 如建议的那样,添加 dependentAssembly 声明确实有效。这是我为测试项目添加到 App.config 的内容:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json"
            <publicKeyToken="30ad4fe6b2a6aeed" />
            <bindingRedirect oldVersion="8.0.0.0" newVersion="6.0.0.0" />
        </dependentAssembly>
    </configuration>
    

测试现在 运行 在命令行上进行,并且刚刚将代码提交给 GitHub,看起来 Appveyor 也构建了并且 运行 也进行了测试。