2011-09-16 39 views
4

一个在我的Windows Phone 7项目中的NUnit的测试中保持与下面的错误而失败的:NUnit测试失败,System.IO.FileNotFoundExeption

Error 4 Test 'MyProject.Tests.Unit.Service.TaskServiceTests.Save_CallsWebService_WhenCalledWithTaskAndSession' failed: System.IO.FileNotFoundException : Could not load file or assembly 'System.Runtime.Serialization, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' or one of its dependencies. The system cannot find the file specified. 
at Newtonsoft.Json.Serialization.DefaultContractResolver.InitializeContract(JsonContract contract) 
at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(Type objectType) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\DefaultContractResolver.cs:line 279 
at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(Type objectType) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\DefaultContractResolver.cs:line 545 
at Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(Type type) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\DefaultContractResolver.cs:line 188 
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.GetContractSafe(Object value) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalWriter.cs:line 84 
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalWriter.cs:line 67 
at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\JsonSerializer.cs:line 451 
at Newtonsoft.Json.JsonConvert.SerializeObject(Object value, Formatting formatting, JsonSerializerSettings settings) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\JsonConvert.cs:line 591 
at Newtonsoft.Json.JsonConvert.SerializeObject(Object value) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\JsonConvert.cs:line 528 
at MyProject.Core.Utility.Extensions.ToJson(Object value) in C:\Workspace\MyProject\MyProject.Service\Utility\Extensions.cs:line 15 
at MyProject.Service.Service.TaskService.Save(Task task, ISession session) in C:\Users\jearl\Dropbox\Code\Workspace\MyProject\MyProject.Service\Service\TaskService.cs:line 34 
at MyProject.Tests.Unit.Service.TaskServiceTests.Save_CallsWebService_WhenCalledWithTaskAndSession() in C:Workspace\MyProject\MyProject.Tests.Unit\Service\TaskServiceTests.cs:line 43 C:\Workspace\MyProject\MyProject.Service\Utility\Extensions.cs 15 

问题是由我写一个扩展方法引起使用JSON.NET将POCO序列化为JSON。看起来JSON.NET对System.Runtime.Serialization有依赖性。

我已经尝试添加JSON.NET和System.Runtime.Serialization引用到我的测试项目,但是这并没有解决问题。

我正在测试的程序集使用RestSharp,而该程序又依赖于JSON.NET。我试着将对System.Runtime.Serialization的引用直接添加到正在测试的程序集中,但这也失败了。

有什么建议吗?

更新:我试图跟踪下面的评论中建议的文件,但Filemon已经退役。它的替代品Process Explorer并没有什么帮助,因为它似乎只显示当前由devenv.exe进程保持打开的文件。搜索对有问题的文件的引用只会产生两个不相关的引用。有没有办法看到我的测试运行的记录,所以我可以告诉它在哪里寻找.dll?

更新2:感谢您的建议。我通过使用Nuget将RestSharp和JSON.NET引用直接添加到单元测试项目中,从而解决了IO问题。现在我发现了以下错误:

Error 5 Test 'MyProject.Tests.Unit.Service.TaskServiceTests.Save_CallsWebService_WhenCalledWithTaskAndSession' failed: System.InvalidProgramException : Common Language Runtime detected an invalid program. 
at System.Xml.Linq.XDocument..ctor() 
at RestSharp.Serializers.XmlSerializer.Serialize(Object obj) 
at RestSharp.RestRequest.AddBody(Object obj, String xmlNamespace) 
at RestSharp.RestRequest.AddBody(Object obj) 
at MyProject.Service.Service.TaskService.Save(Task task, ISession session) in C:\MyProject\MyProject.Service\Service\TaskService.cs:line 34 
at MyProject.Tests.Unit.Service.TaskServiceTests.Save_CallsWebService_WhenCalledWithTaskAndSession() in C:\MyProject\MyProject.Tests.Unit\Service\TaskServiceTests.cs:line 43 C:\MyProject\MyProject.Service\Service\TaskService.cs 34 

搜索网络上的这一项主要是返回到TFS发展提供参考。大。

+1

使用Filemon实用程序(由Sysinternals的),看看是怎么回事,其中一个进程试图找到提到的文件。 – sll

+2

您可以尝试从C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ Silverlight \ v4.0 \ Profile \ WindowsPhone71 \ System.Runtime.Serialization.dll本地复制它,然后确保项目引用是本地。 –

回答

6

对于单元测试项目的WP7项目引用中的所有系统程序集,将“Copy Local”设置为true。我们在我们的项目中使用了Netwonsoft的Json和NUnit,没有任何问题。

干杯, 乔恩