【发布时间】:2013-09-01 00:41:54
【问题描述】:
我正在为 Windows Phone 开发一个应用程序,并且还有一个用于创建和运行测试的测试项目。这工作正常,但突然我收到一个错误,无法找到参考 System.Runtime.Serialization。
具体错误是:
System.IO.FileNotFoundException:无法加载文件或程序集 'System.Runtime.Serialization,版本=2.0.5.0,文化=中性, PublicKeyToken=7cec85d7bea7798e' 或其依赖项之一。
首先,不应该是4.0而不是2.0.5吗?
我试图添加对System.Runtime.Serialization 4.0版本的引用,但是现在错误是这样的:
System.IO.FileLoadException:无法加载文件或程序集 'System.Runtime.Serialization,版本=4.0.0.0,文化=中性, PublicKeyToken=7cec85d7bea7798e' 或其依赖项之一。这 定位程序集的清单定义与程序集不匹配 参考。
我查看了所有项目以找到此引用 (2.0.5) 的定义位置,以便我可以更新它(不确定它是如何更改的)但没有运气。
如果这很重要,我正在使用 JSON.NET (5.0.6)
如果它应该是 2.0.5,有什么方法可以意外或自动更改为 4.0?
这在以前是有效的,所以有些东西发生了变化,而且这当然不是我故意做的......
编辑 在查看了上面的错误之后,我又查看了我的代码,看来罪魁祸首是我在我的一个属性上放置的这个属性:
[JsonProperty(PropertyName="NameType")]
因为属性名称与 JSON 中的名称不同。它运行完美,但在测试期间失败。如果我将其注释掉,则测试通过(但应用程序无法获取此属性)。
EDIT2: 所以在我看来,问题在于 Windows Phone 有一个 Windows Phone JSON.NET 版本,而测试项目加载标准 .net40,但正在测试的 Windows Phone 程序集需要手机版本,所以它被搞砸了......
什么的。我觉得我只是以某种方式搞砸了引用,但我不知道是什么。
我尝试将“复制本地”设置为 true/false,并将 windows phone 的 JSON.NET 引用添加到测试项目,但它告诉我这是错误的版本...
如何告诉测试项目(不是 windows phone 项目)使用 windows phone 程序集进行测试?我是否必须创建一个 Windows phone 类型的新测试项目?
在我添加一个使用 System.Runtime.Serialization 库的属性之前,一切都运行良好...
【问题讨论】:
-
确保您的项目中引用了正确的 JSON.NET 程序集。我相信它应该是 v5.0.6 的运行时 v4.0.30319(JSON 程序集)。你是用 Nuget 还是手动安装的?
-
我确实在 WP8 项目和测试项目上都使用 nuget 进行了安装,看来 winphone 项目使用的是不同的版本,所以我手动添加了引用以匹配 WP8 版本,但是现在我仍然收到后一个错误(程序集清单定义不匹配)......
-
可能值得从 Nuget 安装,以确保问题与程序集版本无关。
-
感谢您的意见,我用新发现更新了描述,有什么想法吗?
标签: unit-testing serialization visual-studio-2012 assemblies