Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Newtonsoft.JSON v9.01 + FileNotFoundException (.NET Core Class library)

(VS2015 Update 3 + Patch)

I have a plain .NET console application (.NET 4.6) and reference a .NET core class library that targets NetStandard v1.3. The class library has a reference to Newtonsoft.JSON.

{
  "version": "1.0.0-*",

  "dependencies": {
    "NETStandard.Library": "1.6.0",
    "Newtonsoft.Json": "9.0.1"
  },
  "buildOptions": { "platform": "anycpu" },

  "frameworks": {
    "netstandard1.3": {
      "imports": "dnxcore50"
    }
  }
}

The referenced NewtonSoft.JSON package is deployed here:

C:\Users\UserAccount\.nuget\packages\Newtonsoft.Json\9.0.1

The Exception:

An unhandled exception of type 'System.IO.FileNotFoundException' occurred in DotNetConsoleApplication.exe

Additional information: Could not load file or assembly 'Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The system cannot find the file specified.

I guess the .net core lib would reference the dll from the netstandard1.0 folder.

enter image description here

like image 321
Legends Avatar asked Jul 13 '16 10:07

Legends


2 Answers

I had the same error recently, after including Newtonsoft.Json 6.0.8 in a dotnet core console app. The solution was to include the System.Runtime.Serialization.Primitives dependancy to the project.json config.

{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable",
    "emitEntryPoint": true
  },
  "dependencies": {
    "System.Runtime.Serialization.Primitives":  "4.0.10-*",
    "Newtonsoft.Json": "6.0.8"
  },
  "frameworks": {
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0"
        }
      },
      "imports": "dnxcore50"
    }
  }
}
like image 146
Errbots Avatar answered Oct 25 '22 08:10

Errbots


Creation of NuGet package is a solution but not the easiest one.

Microsoft finally admitted this is a problem and will fix it, expectantly, in NuGet version 4.0.1, the first update to NuGet 4 after VS 2017 ships.

The cleanest workaround now is to add <RestoreProjectStyle>PackageReference</RestoreProjectStyle> to a legacy project. However according to Rob Relyea MS will ignore this property after RTM so another workaround is <PackageReference Update="PlaceholderToConvinceThisProjectToGetTransitivePackageReferenceFromProjectReferences"/>.

like image 38
Sourcerer Avatar answered Oct 25 '22 08:10

Sourcerer