Visual Studio抛出了“错误的”编译时异常

时间:2014-07-23 23:19:54

标签: c# .net visual-studio-2013

为了在Mono中部署我的项目,我已经将它降级为.Net 4.0,因为我已经完成了我正在引用的库(CommonUtils)。但是,我仍然遇到以下异常:

  

主要引用“CommonUtils”无法解析,因为它对程序集“Newtonsoft.Json,Version = 4.5.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed”具有间接依赖性,该程序集是针对“.NETFramework”构建的, Version = v4.5“框架。这是比当前目标框架“.NETFramework,Version = v4.0”更高的版本。

我试图解决这个问题:

  • 我在两个项目中重新安装了所有Nuget包
  • 我多次尝试清理项目/解决方案,删除所有bin / obj文件夹重建所有内容
  • 我已经更改了程序集的名称,以确保没有任何缓存

这一切都没有帮助。

两个项目都设置为.Net 4.0。引用是将已编译的程序集 CommonUtils 复制到“ExternalLibraries”文件夹中,因为此DLL也用于其他项目。

右键单击Newtonsoft.Json.dll - 它与 CommonUtils 一起移动到bin文件夹 - 显示在详细信息/文件描述中:Json.NET .NET 4.0

我很确定我的所有内容都正确.net 4.0和Visual Studio也允许我添加库并支持我自动完成,只是编译抛出上述警告。作为警告的结果,突然我得到了从 CommonUtils 引用的类型都不存在的异常

  

无法找到命名空间名称'CommonUtils'的类型(您是否缺少using指令或程序集引用?)

我还能尝试做些什么?

PS:几年前我遇到过一个类似的问题,一个旧的程序集用于编译,并通过从头开始设置窗口和视觉工作室来“解决”它,但我只是不喜欢这样做时间。

更新

它适用于另一台计算机:我已经通过USB Stick将文件夹结构带到另一台具有相同操作系统(Windows 8.1)和相同Visual Studio 2013的计算机 - 据我所知,两台计算机都应该拥有所有更新安装 - 并在那里工作。

将USB Stick与成功编译的项目一起带回我的电脑 - 我仍然遇到同样的错误。

(我明白,这意味着两台计算机都不可能安装相同的所有东西,但我不知道如何找到差异,或许可以通过这种方式提出一些错误?)


更新2:

进程资源管理器没有太多帮助,但是当我使用诊断日志编译所有内容时,我认为我得到了关键提示:

...
5>  Unified primary reference "Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed". (TaskId:158)
5>      Using this version instead of original version "4.5.0.0" in "C:\<SolutionFolder>\packages\WebGrease.1.6.0\lib\WebGrease.dll" because of a binding redirect entry in the file "Web.config". (TaskId:158)
5>      Using this version instead of original version "4.5.0.0" in "C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\System.Web.Http.dll" because of a binding redirect entry in the file "Web.config". (TaskId:158)
5>      Using this version instead of original version "4.5.0.0" in "C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\System.Net.Http.Formatting.dll" because of a binding redirect entry in the file "Web.config". (TaskId:158)
5>      Resolved file path is "C:\<SolutionFolder>\packages\Newtonsoft.Json.6.0.3\lib\net40\Newtonsoft.Json.dll". (TaskId:158)
5>      Reference found at search path location "{HintPathFromItem}". (TaskId:158)
5>      Found related file "C:\<SolutionFolder>\packages\Newtonsoft.Json.6.0.3\lib\net40\Newtonsoft.Json.xml". (TaskId:158)
5>      The ImageRuntimeVersion for this reference is "v4.0.30319". (TaskId:158)
...

但是,我在构建工作的另一台计算机上也得到完全相同的消息。

此外,两台计算机在开头显示此行:

Skipping NuGet package Newtonsoft.Json 6.0.3 since it is already installed.

installed在这种情况下的含义是什么?那个NuGet下载了吗?或者它是在GAC的某个地方,但我找不到它? (见评论)

在编译工作的机器上,我还得到了这个输出:

1>  Dependency "Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed". (TaskId:17)
1>      Resolved file path is "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Blend\Newtonsoft.Json.dll". (TaskId:17)
1>      Reference found at search path location "{Registry:Software\Microsoft\.NETFramework,v4.0,AssemblyFoldersEx}". (TaskId:17)
1>          For SearchPath "C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies". (TaskId:17)
1>          Considered "C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\Newtonsoft.Json.winmd", but it didn't exist. (TaskId:17)
1>          Considered "C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\Newtonsoft.Json.dll", but it didn't exist. (TaskId:17)
1>          Considered "C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\Newtonsoft.Json.exe", but it didn't exist. (TaskId:17)
1>          For SearchPath "{TargetFrameworkDirectory}". (TaskId:17)
1>          Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Newtonsoft.Json.winmd", but it didn't exist. (TaskId:17)
1>          Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Newtonsoft.Json.dll", but it didn't exist. (TaskId:17)
1>          Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Newtonsoft.Json.exe", but it didn't exist. (TaskId:17)
1>          For SearchPath "{Registry:Software\Microsoft\.NETFramework,v4.0,AssemblyFoldersEx}". (TaskId:17)
1>          Considered AssemblyFoldersEx locations. (TaskId:17)
1>      Required by "CommonUtils". (TaskId:17)
1>      The ImageRuntimeVersion for this reference is "v4.0.30319". (TaskId:17)

但我在我的计算机上没有看到它,编译失败的地方

最终更新:

我放弃并重新安装了我的整个系统 - 它现在正常工作,但它没有回答错误的Newtonsoft.Json.dll来自哪里以及为什么它没有出现在GAC中的问题,我终于可以了在这个项目上工作。

我实在非常失望,它不像maven那么容易,你可以删除一个文件夹,以便让maven重新下载所有库。

我在VHD上有一个破损系统的图像,所以如果其他人想出了一个很好的解决方案,我可以在虚拟机中试一试。

3 个答案:

答案 0 :(得分:19)

我遇到了同样的问题,解决方法是删除Newtonsoft.json.dll中的c:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\v2.3\ref

这被描述为此Connect bug report中的变通方法。

修改:原始错误报告已删除,可能是新的/相关/同一问题:https://connect.microsoft.com/VisualStudio/feedback/details/816985

答案 1 :(得分:1)

我放弃并重新安装了我的整个系统 - 它现在正常工作,但它没有回答错误的Newtonsoft.Json.dll来自哪里以及为什么它没有出现在GAC中的问题,我终于可以了在这个项目上工作。

答案 2 :(得分:1)

VS 2013中存在一个针对Web项目的错误,其中.csproj中存在一个流氓Newtonsoft.Json 4.5.0引用,该默认项目模板需要手动删除。也许是那个问题?我在我的网站上有一个类似的问题,除了我有一个相互矛盾的版本警告,因为我在NuGet添加的同一个项目中也引用了更新版本的Newtonsoft.Json我必须手动卸载项目并删除它停止警告出现。