在VS2017中并行运行单元测试时,无法加载文件或程序集Newtonsoft.Json,版本= 6.0.0.0

时间:2019-05-31 09:40:56

标签: c# unit-testing json.net

使用VS2017 MVC Web Api项目,我进行了一些单元测试,这些测试在单独运行时可以通过,但是在并行运行时,出现以下错误。我想知道如何能够并行运行这些测试。

  

System.Reflection.ReflectionTypeLoadException
  HResult = 0x80131602
  Message =无法加载一种或多种请求的类型。取回   有关更多信息,请参见LoaderExceptions属性。

     

无法加载文件或程序集'Newtonsoft.Json,版本= 6.0.0.0,   文化=中性,PublicKeyToken = 30ad4fe6b2a6aeed”或其中之一   依赖性。找到的程序集的清单定义不   匹配程序集参考。 (来自HRESULT的异常:   0x80131040)“:”“ Newtonsoft.Json,版本= 6.0.0.0,文化=中性,   PublicKeyToken = 30ad4fe6b2a6aeed

发生异常的代码在s.GetTypes()下:

using Newtonsoft.Json.Linq;

public static class Factory
{
    private static IEnumerable<MyAbstractClass> GetObjects(JObject parsedJson)
    {
        var list = new List<MyAbstractClass>();
        var type = typeof(MyAbstractClass);
        AppDomain.CurrentDomain.GetAssemblies()
            .SelectMany(s => s.GetTypes())
            .Where(p => type.IsAssignableFrom(p) && p.IsClass && !p.IsAbstract)
            .ToList()
            .ForEach(t =>
            {
                var item = (MyAbstractClass)Activator.CreateInstance(t);
                if (item.CanProcess(parsedJson)) list.Add(item);
            });
        return list;
    }
}

我在项目中引用了Newtonsoft.Json 11.0.0.0版本(所以我不确定为什么要使用6.0.0.0版本)。

我确保web.config具有:

  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
    <bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0" />
  </dependentAssembly>

在并行运行期间,一个测试(大概是第一个运行)通过,其他所有测试均因相同的异常而失败。

1 个答案:

答案 0 :(得分:1)

我已经从Newtonsoft.Json 11.0.1版本更新到11.0.2,看来已经解决了我的问题。