现在的位置: 首页 > 综合 > 正文

VS2013自带的Newtonsoft导致的编译异常

2017年11月26日 ⁄ 综合 ⁄ 共 1706字 ⁄ 字号 评论关闭

重装系统后,安装了最新的VisualStudio2013,

结果发现有些项目死活无法编译通过,一直报错,说“未能找到类型或命名空间名称“abc.model”(是否缺少 using 指令或程序集引用?)”,可是这个dll明明是引用了,而且重装之前也一直是正常的,再显示错误信息里的警告,发现一堆的引用错误,一共37个,列举前面几个大致如下:

警告	1	未能解析主引用“abc.model”,因为它对程序集“Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”具有间接依赖关系,而该程序集是针对“.NETFramework,Version=v4.0,Profile=Client”框架生成的。该框架版本高于当前目标框架“.NETFramework,Version=v3.5”。	ConsoleApplication1
警告	2	未能解析主引用“abc.model”,因为它对 .NET Framework 程序集“mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”具有间接依赖关系,而该程序集的版本为“4.0.0.0”,高于当前目标框架中的版本“2.0.0.0”。	ConsoleApplication1
警告	3	未能解析主引用“abc.model”,因为它对 .NET Framework 程序集“System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”具有间接依赖关系,而该程序集的版本为“4.0.0.0”,高于当前目标框架中的版本“3.5.0.0”。	ConsoleApplication1
警告	4	未能解析主引用“abc.model”,因为它对 .NET Framework 程序集“System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”具有间接依赖关系,而该程序集的版本为“4.0.0.0”,高于当前目标框架中的版本“2.0.0.0”。	ConsoleApplication1
警告	5	未能解析主引用“abc.model”,因为它对 .NET Framework 程序集“System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”具有间接依赖关系,而该程序集的版本为“4.0.0.0”,高于当前目标框架中的版本“2.0.0.0”。	ConsoleApplication1

尝试重新引用dll,编译,失败;
尝试重新加载项目,失败;
尝试重启VisualStudio,失败;
尝试重启电脑,还是失败
最后尝试新建一个项目,只引用abc.model这一个dll,编译,还是失败

然后把abc.model项目加入,并只引用这个项目,编译,通过了;

打开abc.model生成文件所在的Debug目录,把abc.model引用的所有dll都删除,只保留abc.model.dll,编译,失败;

终于,尝试一个个删除abc.model引用的dll,尝试定位问题,果然发现删除Newtonsoft.Json后,编译才失败(真笨啊,一开始从错误警告提示里第一个,就该知道是这个问题了)

最后猜想,是不是因为系统目录下存在这个dll的Framework4.0版本导致的,然后在系统目录下搜索Newtonsoft.dll,果然查找到了:
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Blend\Newtonsoft.Json.dll
把这个文件删除后,前面的异常全部消失了。

排除步骤比较原始,比较奇怪的是,这个dll又没有加入GAC,为什么会去使用这个目录下的Newtonsoft.Json.dll,而不是提示未找到Newtonsoft.Json.dll?

有知道的朋友,麻烦告知。

抱歉!评论已关闭.