我正在使用AspNet Web Api Client 5.0,我正在尝试对web api控制器进行单元测试。
var encservice = new EncryptionService();
var acctservice = FakeServices.GetAccountService();
var controller = new AccountController(acctservice, encservice);
controller.Request = new HttpRequestMessage();
当代码
controller.Request.SetConfiguration(new HttpConfiguration());
执行我遇到异常
消息:无法加载文件或程序集“Newtonsoft.Json,Version = 4.5.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed”或其中一个依赖项。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)
来源: System.Net.Http.Formatting
Stacktrace :在System.Net.Http.Formatting.JsonMediaTypeFormatter..ctor() 在System.Net.Http.Formatting.MediaTypeFormatterCollection.CreateDefaultFormatters() 在System.Net.Http.Formatting.MediaTypeFormatterCollection..ctor() 在System.Web.Http.HttpConfiguration.DefaultFormatters() 在System.Web.Http.HttpConfiguration..ctor(HttpRouteCollection路由) 在System.Web.Http.HttpConfiguration..ctor() at EMR.Test.Controller.AccountControllerTest.Should_Get()in c:\ PremiumProjectsCollection \ emr \ src \ EMRAzure \ EMRAzure \ EMR.Test \ Controller \ AccountControllerTest.cs:line 34
我使用的newsoft.json的版本是6.0
我的配置文件中还有一个程序集重定向
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
我使用的测试运行器是 MStest,VS2012
答案 0 :(得分:5)
您需要添加assembly redirect:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json"
publicKeyToken="30ad4fe6b2a6aeed"
culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
(假设 Newtonsoft.Json 的汇编版本完全 6.0.0.0 。)
答案 1 :(得分:3)
(注意下面的注释是指具有此问题的Web Api客户端项目)
我遇到了与Newtonsoft.Json版本相同的问题,所以我删除了旧版本的引用,并使用了Package Manager Console在我的Web Api Client Library和Test Project上安装了最新版本的Newtonsoft.Json。
Install-Package Newtonsoft.Json -Version 6.0.8 (注意你可能需要找出哪个是最新版本)
问题仍然存在,所以我意识到System.Net.Http.Formatting与我最新版本的Json之间存在崩溃。 要解决此问题,请删除System.Net.Http和System.Net.Http.Formatting引用,并通过Nuget安装WebApi客户端库,如下所示:
安装包Microsoft.AspNet.WebApi.Client
这为我解决了。
答案 2 :(得分:1)
我自己没有尝试过,但2012年的mstest似乎有一个错误。你必须使用.testsettings
文件来获取app.config。
答案 3 :(得分:0)
我几天前遇到了同样的问题,我花了几个小时才找到解决方案。
我正在测试一个安装了最新版NewtonSoft的单元,而我的测试项目有旧版本。
我所做的是通过&#34;管理Nuget软件包解决方案来整合我的解决方案中的这个库的版本&#34;右键单击解决方案资源管理器中的解决方案选项。
这将更新当前解决方案下项目中存在的所有NewtonSoft库,并从VisualStudio在解决方案目录中名为packages的文件夹中创建的包控件中删除所有旧版本。