2016-07-13 128 views
10

(VS2015更新3 +補丁)Newtonsoft.JSON v9.01 + FileNotFoundException異常(.NET核心類庫)

我有一個普通的.NET控制檯應用程序(.NET 4.6)並引用.NET核心類庫目標是NetStandard v1.3。 類庫具有對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" 
    } 
    } 
} 

引用的NewtonSoft.JSON包在這裏部署:

C:\用戶\ UserAccount \ .nuget \包\ Newtonsoft.Json \ 9.0.1

例外:

類型'System.IO.FileNotFoundException' 發生未處理的異常DotN中發生etConsoleApplication.exe

其他信息:無法加載文件或組件 'Newtonsoft.Json,版本= 9.0.0.0,文化=中性 公鑰= 30ad4fe6b2a6aeed' 或它的一個依賴。 系統找不到指定的文件。

我猜.net核心庫會引用netstandard1.0文件夾中的DLL。

enter image description here

+0

究竟如何引用該類庫? – svick

+0

添加參考 - >我瀏覽到NetStandardv1.3文件夾: 'C:\ Users \ UserAccount \ Documents \ Visual Studio 2015 \ Projects \ ASP.NETcoreApp \ NetCore46ClassLibrary \ bin \ Debug \ netstandard1.3 \ NetCore46ClassLibrary.dll' – Legends

+0

@傳奇我有完全相同的問題,你發現如何解決這個問題? –

回答

2

解決了2016年7月31日

創建一個新的純.NET控制檯應用程序(不.NET核心)和.NET核心類庫,沒有做他們之間的任何引用的前期。

場景:
1.基於.NET 4.6,它引用一
2.淨核心Classlibrary控制檯應用程序(具有參考Newtonsoft.JSON v9.01)

在.NET核心類庫被配置如下(project.json):

{ 
    "version": "1.0.0-*", 

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

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

1.)首先從.net核心類庫項目創建一個Nuget包。

以管理員身份打開命令行。 轉到(cd)到.NET核心類庫項目(.xproj)的項目文件夾。

運行以下命令:

    DOTNET包

enter image description here

的 「包」 參數將創建一個NuGet包了.NET核心類庫和複製包到debug/release文件夾,取決於你的項目配置。

將nuget包文件複製到您託管本地nuget包的文件夾中。 我讓他們複製到:

C:\用戶\ Admin.nuget \包\ LocalPackages \ NetCore46ClassLibrary


截圖: enter image description here
2)如果你沒有本地的Nuget feed,你必須先創建一個!

本地Nuget文件夾(我將其命名爲「LocalPackages」)將託管您的定製Nuget包。本地Nuget Feed將指向「LocalPackages」,它是所有本地軟件包的根文件夾。

enter image description here

您已經創建了當地的NuGet飼料和複製你的.NET核心類庫的NuGet包某處localPackages文件夾下後,就準備好安裝.NET核心類庫NuGet包。

3)安裝.NET核心庫NuGet包到.NET控制檯應用程序

你現在必須再次打開包管理器控制檯。 選擇軟件包源代碼:本地軟件包(這是我的本地提要名稱,可能不同)。 而默認項目應該是您的.NET控制檯應用程序。

enter image description here

安裝你的.NET核心類庫NuGet包到控制檯應用程序,在我的情況:

install-package NetCore46ClassLibrary 

這就是它!

我的系統
enter image description here

DOTNET --version
1.0.0-preview2-003121

1

可能是因爲Newtonsoft組件是64位和你的.NET的核心項目是32位。也可能是你有牛頓軟件引用的多個版本。

1

最近我有同樣的錯誤,包括Newtonsoft後。 JSON 6.0.8在dotnet核心控制檯應用程序中。解決的辦法是包括System.Runtime.Serialization.Primitives扶養到project.json配置。

{ 
    "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" 
    } 
    } 
} 
+0

我在一個.net標準2.0項目中遇到了這個錯誤,並且我在nuget中安裝了「System.Runtime.Serialization.Primitives」,解決了,謝謝。 – Teddy

4

創建NuGet包是一個解決方案,但不是最簡單的一個。

微軟終於承認這是一個問題,will fix它預期會在NuGet 4.0.1版本中發佈,它是VS 2017發佈後第一次更新到NuGet 4。

最乾淨的解決辦法,現在是增加<RestoreProjectStyle>PackageReference</RestoreProjectStyle>到傳統項目。然而後RTM所以另一個解決辦法是<PackageReference Update="PlaceholderToConvinceThisProjectToGetTransitivePackageReferenceFromProjectReferences"/>according to Rob Relyea MS將忽略此屬性。

0

作爲變通解決方案,在Visual Studio 2017年,您可以修改的NetStandard項目的.csproj的多目標:

  <TargetFrameworks>netstandard1.3;net461</TargetFrameworks> 

重新生成解決方案和參考DLL(NewtonSoft.JSON)將被複制到控制檯項目的bin文件夾中。

看一看我在執行:Workaround Solution