2016-07-13 15 views
10

(3 + पैच VS2015 अद्यतन)Newtonsoft.JSON v9.01 + FileNotFoundException (.NET कोर कक्षा पुस्तकालय)

मैं एक सादे नेट सांत्वना आवेदन (.NET 4.6) है और एक .NET कोर वर्ग पुस्तकालय संदर्भ जो NetStandard v1.3 को लक्षित करता है। कक्षा पुस्तकालय में न्यूटॉन्सॉफ्ट.जेसन का संदर्भ है।

{ 
    "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: \ Users \ उपयोगकर्ता खाता \ .nuget \ संकुल \ Newtonsoft.Json \ 9.0.1

अपवाद :

प्रकार 'System.IO.FileNotFoundException' का एक अनचाहे अपवाद डॉटन में हुआ etConsoleApplication.exe

अतिरिक्त जानकारी: फ़ाइल या विधानसभा 'Newtonsoft.Json, संस्करण = 9.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = 30ad4fe6b2a6aeed' या अपनी निर्भरता से एक लोड नहीं कर सका। सिस्टम निर्दिष्ट फ़ाइल नहीं ढूंढ सकता है।

मुझे लगता है कि .NET कोर lib netstandard1.0 फ़ोल्डर से डीएल का संदर्भ देगा।

enter image description here

+0

आपको लगता है कि वर्ग पुस्तकालय वास्तव में किस प्रकार का संदर्भ है:

में मेरी कार्यान्वयन के लिए एक नज़र है? – svick

+0

संदर्भ जोड़ें-> मैंने NetStandardv1.3 फ़ोल्डर में ब्राउज़ किया: 'सी: \ उपयोगकर्ता \ उपयोगकर्ता खाता \ दस्तावेज़ \ विजुअल स्टूडियो 2015 \ प्रोजेक्ट्स \ ASP.NETcoreApp \ NetCore46ClassLibrary \ bin \ Debug \ netstandard1.3 \ NetCore46ClassLibrary.dll' – Legends

+0

@ किंवदंतियों में मुझे एक ही समस्या है, क्या आपको पता चला कि इसे कैसे ठीक किया जाए? –

उत्तर

2

हल 31.07.2016

एक ताजा सादा नेट सांत्वना एप्लिकेशन (नेट कोर) और एक नेट कोर वर्ग पुस्तकालय बनाने, अग्रिम उन दोनों के बीच किसी भी संदर्भित कर के बिना।

परिदृश्य:
1. कंसोल नेट 4.6, का संदर्भ जो एक
2. नेट कोर Classlibrary के आधार पर अनुप्रयोग (है Newtonsoft.JSON v9.01 के लिए एक संदर्भ)

नेट

{ 
    "version": "1.0.0-*", 

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

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

समाधान

: कोर वर्ग पुस्तकालय के रूप में (project.json) इस प्रकार कॉन्फ़िगर किया गया है

1.) नेट कोर क्लास लाइब्रेरी प्रोजेक्ट से पहले एक Nuget पैकेज बनाएं।

व्यवस्थापक के रूप में कमांड लाइन खोलें। .NET कोर क्लास लाइब्रेरी प्रोजेक्ट (.xproj) के प्रोजेक्ट फ़ोल्डर में जाएं (सीडी)।

भागो निम्न आदेश:

    डॉटनैट पैक

enter image description here

"पैक" पैरामीटर पैकेज नेट कोर वर्ग पुस्तकालय के बाहर एक nuget पैकेज बना सकते हैं और प्रतिलिपि बनाएगा डीबग/रिलीज फ़ोल्डर में, आपके प्रोजेक्ट कॉन्फ़िगरेशन पर निर्भर करता है।

nuget पैकेज फ़ाइलों को फ़ोल्डर में कॉपी करें जहां आप अपने स्थानीय nuget संकुल होस्ट करते हैं। मैं उन्हें करने के लिए नकल की है:

C: \ Users \ Admin.nuget \ संकुल \ LocalPackages \ NetCore46ClassLibrary


स्क्रीनशॉट: enter image description here
2.) यदि आपके पास स्थानीय नुजेट फ़ीड नहीं है, तो आपको पहले एक बनाना होगा!

स्थानीय Nuget फ़ोल्डर (मैंने इसे "स्थानीय पैकेज" नाम दिया) आपके कस्टम Nuget संकुल होस्ट करेगा। स्थानीय Nuget फ़ीड "LocalPackages" को इंगित करेगा, जो सभी स्थानीय संकुलों के लिए मूल फ़ोल्डर है।

enter image description here

के बाद आप स्थानीय nuget फ़ीड बनाया है और कहीं न कहीं localPackages फ़ोल्डर के अन्तर्गत अपने .net कोर वर्ग पुस्तकालय के nuget पैकेज की नकल की है, तो आप अपने .net कोर वर्ग पुस्तकालय nuget पैकेज स्थापित करने के लिए तैयार कर रहे हैं।

3.) नेट सांत्वना एप्लिकेशन

अब आप फिर से पैकेज प्रबंधक कंसोल को खोलने के लिए है में नेट कोर पुस्तकालय Nuget पैकेज को स्थापित करें। पैकेज स्रोत चुनें: स्थानीय पैकेज (यह मेरा स्थानीय फ़ीड नाम है, अलग हो सकता है)। और डिफ़ॉल्ट प्रोजेक्ट आपका .NET कंसोल ऐप होना चाहिए।

enter image description here

, कंसोल अनुप्रयोग में अपने .net कोर वर्ग पुस्तकालय nuget पैकेज को स्थापित करें मेरे मामले में:

install-package NetCore46ClassLibrary 

यह है कि!

मेरे प्रणाली:
enter image description here

डॉटनैट --version
1.0.0-preview2-003121

1

हो सकता है कि Newtonsoft विधानसभा 64 बिट है और अपने नेट कोर परियोजना 32 बिट है। यह भी हो सकता है कि आपके पास न्यूटनसॉफ्ट के संदर्भित कई संस्करण हैं।

1

मैं Newtonsoft सहित के बाद हाल ही में एक ही त्रुटि थी। एक डॉटनेट कोर कंसोल ऐप में जेसन 6.0.8।समाधान System.Runtime.Serialization.Primitives प्रोजेक्ट.जेसन कॉन्फ़िगरेशन पर निर्भरता शामिल करना था।

{ 
    "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 में, वीएस 2017 जहाजों के बाद NuGet 4 के लिए पहला अपडेट।

अब सबसे स्वच्छ कार्यवाही एक विरासत परियोजना में <RestoreProjectStyle>PackageReference</RestoreProjectStyle> जोड़ने के लिए है। हालांकि according to Rob Relyea एमएस आरटीएम के बाद इस संपत्ति को अनदेखा कर देगा, इसलिए एक और कामकाज <PackageReference Update="PlaceholderToConvinceThisProjectToGetTransitivePackageReferenceFromProjectReferences"/> है।

0

एक समाधान के समाधान, दृश्य स्टूडियो 2017 में के रूप में, आप बहु लक्ष्य के रूप में .csproj NetStandard प्रोजेक्ट को संशोधित कर सकते हैं:

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

समाधान और संदर्भित dll (NewtonSoft.JSON) के पुनर्निर्माण होगा कंसोल प्रोजेक्ट के बिन फ़ोल्डर में कॉपी किया जाए। Workaround Solution