Windows Phone 7 プロジェクトの NUnit テストの 1 つが、次のエラーで失敗し続けます。
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 の両方の参照をテスト プロジェクトに追加しようとしましたが、問題は解決しませんでした。
私がテストしているアセンブリは、JSON.NET に依存する RestSharp を使用しています。System.Runtime.Serialization への参照をテスト対象のアセンブリにも直接追加しようとしましたが、それも失敗します。
助言がありますか?
更新: 以下のコメントで提案されているように、ファイルを追跡しようとしていますが、Filemon は廃止されました。その代替である Process Explorer は役に立ちません。devenv.exe プロセスによって現在開かれているファイルのみが表示されるように見えるからです。問題のあるファイルへの参照を検索すると、関連のない参照が 2 つしか見つかりません。テスト実行の記録を表示して、.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
これで Web を検索すると、ほとんどの場合、TFS 開発への参照が返されます。偉大な。