Appveyor,测试引用错误的汇编版本

时间:2017-07-12 15:38:26

标签: c# .net json nuget-package-restore appveyor

Appveyor平台的新功能,所以这可能只是我的天真。我将我的项目设置为从我的GitHub仓库构建。除了测试之外,这似乎有效。代码主要是.Net 4.0,因为它支持遗留项目 - 我现在无法将其移到后来的框架中。因为这个项目已经使用了Newtonsoft.Json,所以我不得不使用特定的版本。所有代码和测试都在本地运行。但是,一旦我设置了CI(并且让我的头脑让Nuget恢复发生),我仍然会在测试中完全失败。他们没有做任何壮观的事情。错误很简单 - Nuget正在推出版本6.0.8,但是测试的构建过程想要根据输出引用8.0.0.0:

  

发现测试...确定vstest.console / logger:Appveyor   “C:\项目\ debuginterface \ Ratcow.Debugging.Server.Tests \ BIN \调试\ Ratcow.Debugging.Server.Tests.dll”   Microsoft(R)测试执行命令行工具版本15.0.26228.0   版权所有(c)Microsoft Corporation。版权所有。开始   测试执行,请稍候...失败BasicTest_ValueTypes错误   消息:测试方法   Ratcow.Debugging.Server.Tests.MainUnitTest.BasicTest_ValueTypes扔了   exception:System.IO.FileLoadException:无法加载文件或   程序集'Newtonsoft.Json,版本= 8.0.0.0,文化=中立,   PublicKeyToken = 30ad4fe6b2a6aeed'或其中一个依赖项。该   找到程序集的清单定义与程序集不匹配   参考。 (HRESULT异常:0x80131040)--->   System.IO.FileLoadException:无法加载文件或程序集   'Newtonsoft.Json,Version = 6.0.0.0,Culture = neutral,   PublicKeyToken = 30ad4fe6b2a6aeed'或其中一个依赖项。该   找到程序集的清单定义与程序集不匹配   参考。 (来自HRESULT的异常:0x80131040)堆栈跟踪:       在Ratcow.Debugging.Server.DebugInterface.InstanceAsString(Object value)at at   Ratcow.Debugging.Server.DebugInterface.GetVariableValue(字符串   variableName)in   C:\项目\ debuginterface \ Ratcow.Debugging.Server \ DebugInterface.cs:行   104点   Ratcow.Debugging.Server.Tests.MainUnitTest.BasicTest_ValueTypes()in   C:\项目\ debuginterface \ Ratcow.Debugging.Server.Tests \ MainUnitTest.cs:行   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并进行测试。

1 个答案:

答案 0 :(得分:0)

好的,感谢上面的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>
    
  3. 测试现在在命令行上运行,并且刚刚将代码提交给GitHub,看起来Appveyor也构建并运行测试。