Visual Studio正在抛出一个“;错误的”;编译时异常
本文关键字:错误 异常 编译 一个 Studio Visual | 更新日期: 2023-09-27 18:14:23
为了在Mono中部署我的项目,我将其降级为.Net 4.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文件夹并重建所有内容
- 我更改了程序集的名称,以确保没有缓存任何内容
这些都无济于事。
这两个项目都将编译为.Net 4.0。引用是通过将编译的程序集CommonUtils复制到"ExternalLibraries"文件夹中来实现的,因为此DLL也用于其他项目。
右键单击Newtonsoft.Json.dll-它与CommonUtils一起移动到bin
文件夹-显示在详细信息/文件描述中:Json.NET .NET 4.0
我确信我对.net 4.0的一切都是正确的,Visual Studio也允许我添加库,并支持我自动完成,只是编译会引发上述警告。作为警告的结果,我突然得到异常,从CommonUtils引用的类型都不存在
找不到命名空间名称"CommonUtils"的类型(是否缺少using指令或程序集引用?(
我还能做些什么来使它发挥作用?
附言:几年前我也遇到过类似的问题,用一个旧程序集进行编译,并通过从头开始设置windows和visualstudio来"解决"这个问题,但这次我不想这么做。
更新:
它在另一台计算机上工作:我已经通过USB Stick将文件夹结构带到了另一台具有相同操作系统(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)
...
然而,我在构建工作的另一台计算机上也收到了完全相同的消息。
此外,两台计算机在开头都显示了这一行:
Skipping NuGet package Newtonsoft.Json 6.0.3 since it is already installed.
installed
在这种情况下意味着什么?NuGet下载了它?还是它在广汽的某个地方,但我找不到它?(见评论(
在编译工作的机器上,我得到了额外的输出:
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中试用。
我遇到了同样的问题,解决方案是删除位于c:'Program Files'Microsoft SDKs'Windows Azure'.NET SDK'v2.3'ref
中的Newtonsoft.json.dll
此Connect错误报告中将此描述为解决方法。
编辑:原始错误报告已删除,可能是新的/相关的/相同的问题:https://connect.microsoft.com/VisualStudio/feedback/details/816985
我放弃并重新安装了我的整个系统-它现在可以工作了,但它没有回答错误的Newtonsoft.Json.dll来自哪里以及为什么它没有出现在GAC中的问题,我终于可以再次进行该项目了。
VS 2013中有一个漏洞,用于web项目,其中.csproj中遗留了一个来自默认项目模板的流氓Newtonsoft.Json 4.5.0引用,需要手动删除。也许是这个问题?我在自己的一个网站上也遇到了类似的问题,只是我有一个版本冲突的警告,因为我还引用了Newtonsoft的新版本。Json在从NuGet添加的同一个项目中,我不得不手动卸载该项目并将其删除,以阻止警告出现。