Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Visual Studio is throwing a "wrong" compile time exception

In order to deploy my project in Mono, I've downgraded it to .Net 4.0 as I've done with the library which I'm referencing (CommonUtils). However, I'm still getting the following exception:

The primary reference "CommonUtils" could not be resolved because it has an indirect dependency on the assembly "Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" which was built against the ".NETFramework,Version=v4.5" framework. This is a higher version than the currently targeted framework ".NETFramework,Version=v4.0".

What I've tried to resolve the issue:

  • I've re-installed all Nuget packages in both projects
  • I've multiple times tried to clean the projects / solutions, delete all bin/obj folder an rebuild everything
  • I've changed the name of the assembly in order to be sure nothing is cached

None of this helped.

Both projects are set to be compiled as .Net 4.0. The reference is by copying the compiled assembly CommonUtils into an "ExternalLibraries"-folder, since this DLL is also used in other projects.

Right-click on Newtonsoft.Json.dll - which is moved to the bin folder together with CommonUtils - shows in Details/File description: Json.NET .NET 4.0

I am pretty sure that I have everything correct for .net 4.0 and Visual Studio also lets me add the library and supports me with auto-completion, just the compiling throws the mentioned warning. As a result of the warning, suddenly I get exceptions that none of the types referenced from CommonUtils exists

The type of namespace name 'CommonUtils' could not be found (are you missing a using directive or an assembly reference?)

What else can I try to make this work?

PS: I had a similar problem few years ago, where an old assembly was used for compiling, and "solved" it by literally setting up windows and visual studio from scratch, but I just don't feel like doing it this time.

Update:

It works on another computer: I've taken the folder structure via USB Stick to another computer with the same OS (Windows 8.1) and the same Visual Studio 2013 - as far as I can tell, both computers should have all the updates installed - and there it works.

Taking the USB Stick with the successfully compiled project back to my PC - I'm still getting the same errors.

(I understand, this means that both computers can't possibly have everything the same installed, but I wouldn't know how to find the difference, maybe some hint with what can be wrong this way?)


Update 2:

Process explorer didn't help too much, but when I compiled everything with diagnostic log, I think I got the key hint:

...
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)
...

However, I get the exact same message also on the other computer where the build is working.

Additionally both computers show this line in the beginning:

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

What does installed mean in this context? that NuGet downloaded it? or is it somewhere in the GAC, but I couldn't find it? (see comments)

And on the machine, where the compilation works, I get additionally this output:

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)

But I don't see it on my computer, where the compilation fails

Final Update:

I gave up and reinstalled my whole system - it works now, however it doesn't answer the question where the wrong Newtonsoft.Json.dll came from and why it didn't show up in the GAC, I can finally again work on that project.

I'm actually quite disappointed, that it can't be as easy as in maven, where you can just delete one folder in order to make maven redownload all the libraries.

I have an image of the broken system on a VHD, so if anyone else comes up with a great solution, I can try it out in the VM.

like image 465
peter Avatar asked Jul 23 '14 23:07

peter


People also ask

How to find the build errors in Visual Studio?

To display the Error List, choose View > Error List, or press Ctrl+\+E.

How do you solve a build error?

Go to Tools >> Options… >> Projects and Solutions >> Build and Run. On the right-hand side panel, just change the value in dropdown displayed under 'On Run, when build or deployment errors occur:' to 'Do not Launch' and we are done.


2 Answers

I had the same issue, and the solution was to delete the Newtonsoft.json.dll located in c:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\v2.3\ref

This is described as a workaround in this Connect bug report.

Edit: Original bug report removed, possible new/related/same issue: https://connect.microsoft.com/VisualStudio/feedback/details/816985

like image 101
Magnus Johansson Avatar answered Sep 29 '22 22:09

Magnus Johansson


I gave up and reinstalled my whole system - it works now, however it doesn't answer the question where the wrong Newtonsoft.Json.dll came from and why it didn't show up in the GAC, I can finally again work on that project.

like image 20
peter Avatar answered Sep 29 '22 21:09

peter