C# VisualStudio正在抛出一个;“错误”;编译时异常

C# VisualStudio正在抛出一个;“错误”;编译时异常,c#,.net,visual-studio-2013,C#,.net,Visual Studio 2013,为了在Mono中部署我的项目,我已经将它降级为.NET4.0,就像我对引用的库(CommonUtils)所做的那样。但是,我仍然得到以下例外情况: 无法解析主引用“CommonUtils”,因为它间接依赖于程序集“Newtonsoft.Json,Version=4.5.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6eed”,该程序集是根据“.NETFramework,Version=v4.5”框架构建的。这是一个比当前目标框架“.NETFramew

为了在Mono中部署我的项目,我已经将它降级为.NET4.0,就像我对引用的库(CommonUtils)所做的那样。但是,我仍然得到以下例外情况:

无法解析主引用“CommonUtils”,因为它间接依赖于程序集“Newtonsoft.Json,Version=4.5.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6eed”,该程序集是根据“.NETFramework,Version=v4.5”框架构建的。这是一个比当前目标框架“.NETFramework,version=v4.0”更高的版本

我试图解决的问题是:

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

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

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

我非常确信,我对.NET4.0的所有内容都是正确的,VisualStudio还允许我添加库并支持自动完成,只是编译时抛出了上面提到的警告。作为警告的结果,我突然发现异常,从CommonUtils引用的类型都不存在

找不到命名空间名称“CommonUtils”的类型(是否缺少using指令或程序集引用?)

我还能做些什么来让这一切顺利进行呢

PS:几年前我遇到了一个类似的问题,使用一个旧的程序集进行编译,并通过从头开始设置windows和visual studio来“解决”它,但这次我不想这么做

更新:

它可以在另一台计算机上工作:我已经通过USB记忆棒将文件夹结构连接到另一台具有相同操作系统(Windows 8.1)和相同Visual Studio 2013的计算机上——据我所知,这两台计算机都应该安装了所有更新——并且它可以工作

将带有已成功编译项目的U盘带回我的电脑-我仍然会收到相同的错误

(我明白,这意味着两台计算机不可能安装所有相同的设备,但我不知道如何找出差异,也许有一些提示说明这种方式可能会出现什么问题?)


更新2:

Process explorer帮助不大,但当我使用诊断日志编译所有内容时,我想我得到了关键提示:

...
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)
...
在此上下文中,
installed
是什么意思?你下载了吗?还是在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中,您只需删除一个文件夹,就可以让maven重新下载所有库


我在VHD上有一个坏系统的映像,因此如果其他人提出了一个很好的解决方案,我可以在VM中试用。

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

VS 2013中有一个web项目的bug,其中默认项目模板中的.csproj中有一个流氓的Newtonsoft.Json 4.5.0引用,需要手动删除。也许就是这个问题?我在我的一个网站上也遇到了类似的问题,除了版本冲突的警告,因为我在同一个项目中引用了从NuGet添加的Newtonsoft.Json的较新版本,我不得不手动卸载该项目并将其删除以阻止出现警告。

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

这在本文中被描述为一种解决方法


编辑:原始错误报告已删除,可能存在新的/相关的/相同的问题:

尝试在解决方案中的所有文件中搜索字符串“4.5.0.0”。此外,请检查
公用项的“使用特定版本”标志。也许它被设置为“是”,迫使你使用比你想要的更高的版本。你需要关注间接依赖。CommonUtils引用了另一个程序集,该程序集是使用新版本的Newtonsoft.Json.dll构建的。这在VS中不直接可见,您可以通过在直接依赖项上运行ildasm.exe来查看。检查是否有人有将Newtonsoft.Json安装到GAC的绝妙想法…尝试使用诸如ProcessExplorer之类的工具查看您的程序从何处加载其DLL。不,我的所有项目文件仅引用最新版本的Newtonsoft.Json(6.0.3),或者根本就没有Newtonsoft.Json。此外,您还可以了解到,它在另一台计算机上工作,项目文件中的错误引用也应该在另一台计算机上引发相同的错误。有时,版本冲突不会根据复制到输出目录的版本而出现(MSBuild任意选取一个)因此,可能恰好在另一台机器上工作,但是如果您检查了.csproj文件的XML,但它不在那里,那么就必须检查它
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)