मैं dnx में गुम निर्भरता (या अन्य लोडर विफलताओं) का निदान कैसे कर सकता हूं?


133

मैं Kestrel का उपयोग कर DNX पर ASP.NET vNext के लिए HelloWeb नमूने के एक संशोधित संस्करण को चलाने की कोशिश कर रहा हूं । मैं समझता हूं कि यह रक्तस्राव के किनारे पर बहुत अधिक है, लेकिन मुझे उम्मीद है कि ASP.NET टीम कम से कम सबसे सरल संभव एप्लिकेशन एप्लिकेशन को बनाए रखेगा :)

वातावरण:

  • लिनक्स (उबंटू, बहुत ज्यादा)
  • मोनो 3.12.1
  • DNX 1.0.0-beta4-11257 (मेरे पास 11249 भी उपलब्ध हैं)

"वेब ऐप" कोड, में Startup.cs:

using Microsoft.AspNet.Builder;
public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.UseWelcomePage();
    }
}

परियोजना विन्यास, में project.json:

{
  "dependencies": {
    "Kestrel": "1.0.0-beta4",
    "Microsoft.AspNet.Diagnostics": "1.0.0-beta4",
    "Microsoft.AspNet.Hosting": "1.0.0-beta4",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta4",
    "Microsoft.AspNet.StaticFiles": "1.0.0-beta4",
    "Microsoft.Framework.Runtime": "1.0.0-beta4",
    "Microsoft.Framework.Runtime.Common": "1.0.0-beta4",
    "Microsoft.Framework.Runtime.Loader": "1.0.0-beta4",
    "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4",
  },
  "commands": {
    "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"
  },
  "frameworks": {
    "dnx451": {}
  }
}

kpm restore ठीक काम करने के लिए प्रकट होता है।

जब मैं दौड़ने की कोशिश करता हूं, हालांकि, मुझे एक अपवाद मिलता है जो सुझाव देता है कि Microsoft.Framework.Runtime.IApplicationEnvironmentनहीं मिल सकता है। कमांड लाइन और त्रुटि (कुछ हद तक सुधारित)

.../HelloWeb$ dnx . kestrel
System.IO.FileNotFoundException: Could not load file or assembly 
'Microsoft.Framework.Runtime.IApplicationEnvironment,
  Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
or one of its dependencies.
File name: 'Microsoft.Framework.Runtime.IApplicationEnvironment,
  Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
  at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke 
    (System.Reflection.MonoMethod,object,object[],System.Exception&)
  at System.Reflection.MonoMethod.Invoke 
    (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder,
     System.Object[] parameters, System.Globalization.CultureInfo culture)
    [0x00000] in <filename unknown>:0

स्पष्ट रूप से, मेरी सबसे महत्वपूर्ण आवश्यकता इसे ठीक करने की है, मैं यह भी सलाह दूंगा कि कैसे गलत हो रहा है इसका निदान करने के लिए आगे बढ़ना है ताकि मैं भविष्य में इसी तरह के मुद्दों को ठीक कर सकूं। (यह भी इस सवाल को और अधिक उपयोगी बनाने की संभावना है, भी।)

मैंने विधानसभा स्रोतMicrosoft.Framework.Runtime.IApplicationEnvironment में पाया है , और यह हाल ही में परिवर्तित नहीं हुआ है। यह स्पष्ट नहीं है कि अपवाद किसी अन्य विधानसभा के भीतर केवल इंटरफ़ेस के बजाय, यदि यह अपने आप में एक संपूर्ण असेंबली है तो नाम कैसे दिखाता है। मैं यह अनुमान लगा रहा हूं कि यह विधानसभा के तटस्थ इंटरफेस के कारण हो सकता है , लेकिन यह त्रुटि से स्पष्ट नहीं है। ( मर चुका है, इसलिए ऐसा नहीं है ... )Microsoft.Framework.Runtime.Interfaces[AssemblyNeutral]


जिज्ञासा से बाहर, क्या आप अपने विधानसभा तटस्थ इंटरफेस लिंक या कहीं और के लिए github.com/aspnet/Home/wiki/Assembly-Neutral-Interfaces से लिंक करने का मतलब था ? जैसा कि वर्तमान में टूट गया है
cgijbels

@cgijbels: धन्यवाद - मैं वास्तव में davidfowl.com/assembly-neutral-interfaces से लिंक करने के लिए था, लेकिन आपका लिंक यह शायद बेहतर है ...
जॉन स्कीट

@JonSkeet विधानसभा तटस्थ इंटरफेस अब चले गए हैं।
tugberk

@tugberk: हे भगवान, सच में? यह दिलचस्प है - क्या आपके पास एक लिंक है जिसे मैं एक संपादन में शामिल कर सकता हूं?
जॉन स्कीट

@JonSkeet github.com/aspnet/Configuration/commit/… हो सकता है? :)
tugberk

जवाबों:


144

अच्छा प्रश्न। आपकी विशिष्ट समस्या के लिए, ऐसा लगता है कि आपकी सुलझी हुई निर्भरता में आप बेमेल हैं। जब इस तरह की चीजें होती हैं, तो यह संभव है क्योंकि आप अपना आवेदन असंगत dnx पर चला रहे हैं। हम अभी भी बहुत बड़े ब्रेकिंग परिवर्तन कर रहे हैं ताकि यदि आप कभी भी टाइप मिसिंग के तरीके को गायब देखते हैं, तो संभावना है कि आप रनिंग betaXपैकेज और betaYdnx या वर्सा समाप्त कर रहे हैं।

और भी विशेष रूप से, असेंबली न्यूट्रल इंटरफेस को बीटा 4 में हटा दिया गया था लेकिन ऐसा लग रहा है कि आप जो एप्लिकेशन चला रहे हैं वह अभी भी उनका उपयोग कर रहा है।

हमारे पास इसे बनाने की योजना है ताकि पैकेज न्यूनतम डीएनएक्स को चिह्नित कर सकें जो उन्हें त्रुटि संदेश को अधिक स्पष्ट करने के लिए चलाने की आवश्यकता होती है। साथ ही जैसे-जैसे समय बीतता जाएगा, ब्रेकिंग परिवर्तन नीचे मर जाएंगे।

सामान्य तौर पर, मुझे ऐसा लगता है कि यह समय है जब मैंने dnx का उपयोग करते समय इस तरह के मुद्दों का निदान करने के बारे में एक गाइड लिखा था (क्योंकि यह मौजूदा .NET के लिए बहुत अलग है)।

आपके द्वारा लगाई गई निर्भरताएं project.jsonकेवल शीर्ष स्तर हैं। संस्करण भी हमेशा न्यूनतम होते हैं (यह एक NuGet पैकेज की तरह है)। इसका मतलब यह है कि जब आप निर्दिष्ट Foo 1.0.0-beta4करते हैं कि आप वास्तव में निर्दिष्ट कर रहे हैं Foo >= 1.0.0-beta4। इसका मतलब यह है कि यदि आप पूछते हैं MVC 0.0.1और आपके कॉन्फ़िगर किए गए फ़ीड पर न्यूनतम संस्करण हैं MVC 3.0.0, तो आपको वह मिल जाएगा। जब तक आप इसे निर्दिष्ट नहीं करते, हम भी आपके संस्करण को फ्लोट करते हैं। यदि आप 1.0.0 मांगते हैं और यह मौजूद है, तो आपको नया संस्करण मौजूद होने पर भी 1.0.0 मिलेगा। खाली संस्करणों को निर्दिष्ट करना हमेशा खराब होता है और बाद के बिल्ड में बंद हो जाएगा।

एक नई सुविधा है जिसे हम फ्लोटिंग संस्करण कहे जाने वाले नगेट से परिचित करा रहे हैं। आज यह केवल प्रीलेरेज टैग पर काम करता है, लेकिन अगले संस्करण में यह संस्करण के अधिक हिस्सों पर काम करेगा। यह पैकेज विनिर्देश फ़ाइल में संस्करण श्रेणियों को निर्दिष्ट करने के लिए npm और रत्न सिंटैक्स के समान है।

1.0.0-*- मीन्स मुझे प्रीफ़िक्स ( सिमेंटिक वर्जनिंग रूल्स के अनुसार) से मेल करने वाला हाईएस्ट वर्ज़न देते हैं या यदि उस प्रीफ़िक्स से मेल खाने वाला कोई वर्ज़न नहीं है, तो सामान्य व्यवहार का उपयोग करें और मुझे LOWEST वर्ज़न> = निर्दिष्ट वर्ज़न प्राप्त करें।

जब आप नवीनतम बिल्ड में पुनर्स्थापना चलाते हैं, तो यह एक फ़ाइल लिखेगा जिसे कहा जाता है project.lock.json। इस फ़ाइल में परिभाषित सभी लक्ष्य रूपरेखाओं के लिए निर्भरता का सकर्मक समापन होगा project.json

जब ऐसा कुछ विफल होता है तो आप निम्नलिखित कार्य कर सकते हैं:

उपयोग किए गए निर्भरता पर एक नज़र डालें kpm list। यह आपको आपकी परियोजना द्वारा संदर्भित संकुल के हल किए गए संस्करण दिखाएगा और किस निर्भरता ने इसे अंदर खींच लिया है। उदाहरण के लिए यदि A -> B, तो यह हो जाएगा:

ए
  -> बी
बी
 ->

वास्तविक KPM सूची आउटपुट:

ClassLibrary39 के लिए निर्भरता सूचीकरण (C: \ Users \ davifowl \ Documents \ Visual Studio 14 \ Projects \ ClassLibrary39 \ src \ ClassLibrary39 \ project.json)

[Target framework DNX,Version=v4.5.1 (dnx451)]

 framework/Microsoft.CSharp 4.0.0.0
    -> ClassLibrary39 1.0.0
 framework/mscorlib 4.0.0.0
    -> ClassLibrary39 1.0.0
 framework/System 4.0.0.0
    -> ClassLibrary39 1.0.0
 framework/System.Core 4.0.0.0
    -> ClassLibrary39 1.0.0
*Newtonsoft.Json 6.0.1
    -> ClassLibrary39 1.0.0

[Target framework DNXCore,Version=v5.0 (dnxcore50)]

*Newtonsoft.Json 6.0.1
    -> ClassLibrary39 1.0.0
 System.Runtime 4.0.20-beta-22709
    -> ClassLibrary39 1.0.0

* का अर्थ है प्रत्यक्ष निर्भरता।

यदि आपके पास एक कामकाजी दृश्य स्टूडियो है (जो अभी DNX के साथ टूटता है), तो आप संदर्भ नोड को देख सकते हैं। इसमें समान रूप से प्रतिनिधित्व किया गया डेटा है:

संदर्भ नोड

आइए देखें कि निर्भरता की विफलता कैसी दिखती है:

यहाँ प्रोजेक्ट है

{
    "version": "1.0.0-*",
    "dependencies": {
        "Newtonsoft.Json": "8.0.0"
    },

    "frameworks" : {
        "dnx451" : { 
            "dependencies": {
            }
        },
        "dnxcore50" : { 
            "dependencies": {
                "System.Runtime": "4.0.20-beta-22709"
            }
        }
    }
}

Newtonsoft.Json 8.0.0मौजूद नहीं है। तो चल रहे kpm पुनर्स्थापना निम्न दिखाता है:

यहाँ छवि विवरण दर्ज करें

पुनर्स्थापना विफल होने पर निदान करते समय, किए गए HTTP अनुरोधों को देखें, वे आपको बताते हैं कि कॉन्फ़िगर किए गए पैकेज स्रोत kpm क्या देखते हैं। उपरोक्त छवि में देखें, एक CACHEअनुरोध है। यह संसाधन के प्रकार (nupkg या nuspec) के आधार पर कैशिंग में बनाया गया है और इसमें एक विन्यास योग्य TTL (देखो kpm restore --help) है। यदि आप kpmदूरस्थ NuGet स्रोतों को हिट करने के लिए बाध्य करना चाहते हैं, तो --no-cacheध्वज का उपयोग करें :

KPM पुनर्स्थापित करें -कोई-कैश

इन त्रुटियों को पैकेज मैनेजर लॉग आउटपुट विंडो में विजुअल स्टूडियो में भी दिखाया जाता है:

यहाँ छवि विवरण दर्ज करें

पक्षीय लेख!

पैकेज स्रोत

मैं अभी जिस तरह से NuGet.config काम करता हूं, उसका वर्णन करूंगा (जो भविष्य में परिवर्तन की संभावना होगी)। डिफ़ॉल्ट रूप से आपके पास एक NuGet.config है जिसके साथ डिफ़ॉल्ट NuGet.org स्रोत वैश्विक स्तर पर कॉन्फ़िगर किया गया है %appdata%\NuGet\NuGet.Config। आप इन वैश्विक स्रोतों को दृश्य स्टूडियो के भीतर या NuGet कमांड लाइन टूल के साथ प्रबंधित कर सकते हैं। विफलताओं का निदान करने का प्रयास करते समय आपको हमेशा अपने प्रभावी स्रोतों (kpm आउटपुट में सूचीबद्ध) को देखना चाहिए।

NuGet.config के बारे में अधिक यहाँ पढ़ें

वास्तविकता में वापस:

जब निर्भरता अनसुलझे होते हैं, तो एप्लिकेशन चलाना आपको यह देगा:

> dnx . run
System.InvalidOperationException: Failed to resolve the following dependencies for target framework 'DNX,Version=v4.5.1':
   Newtonsoft.Json 8.0.0

Searched Locations:
  C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\src\{name}\project.json
  C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\test\{name}\project.json
  C:\Users\davifowl\.dnx\packages\{name}\{version}\{name}.nuspec
  C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\{name}.dll
  C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Facades\{name}.dll
  C:\WINDOWS\Microsoft.NET\assembly\GAC_32\{name}\{version}\{name}.dll
  C:\WINDOWS\Microsoft.NET\assembly\GAC_64\{name}\{version}\{name}.dll
  C:\WINDOWS\Microsoft.NET\assembly\GAC_MSIL\{name}\{version}\{name}.dll

Try running 'kpm restore'.

   at Microsoft.Framework.Runtime.DefaultHost.GetEntryPoint(String applicationName)
   at Microsoft.Framework.ApplicationHost.Program.ExecuteMain(DefaultHost host, String applicationName, String[] args)
   at Microsoft.Framework.ApplicationHost.Program.Main(String[] args)

रनटाइम मूल रूप से यह सत्यापित करने का प्रयास करता है कि चलाने के लिए प्रयास करने से पहले संपूर्ण निर्भरता ग्राफ हल हो गया है। यदि यह सुझाव देता है kpm restoreकि यह चल रहा है क्योंकि यह सूचीबद्ध निर्भरताओं को नहीं पा सकता है।

एक और कारण है कि आपको यह त्रुटि मिल सकती है यदि आप गलत dnx स्वाद चला रहे हैं। यदि आपका आवेदन केवल dnx451 को निर्दिष्ट करता है और आप CoreCLR dnx को चलाने का प्रयास करते हैं, तो आपको एक समान समस्या दिखाई दे सकती है। त्रुटि संदेश में लक्ष्य ढांचे पर पूरा ध्यान दें:

दौड़ने के लिए:

dnx4x - runs on dnx-clr-{etc}
dnxcore50 - runs on dnx-coreclr-{etc}

जब आप दौड़ने की कोशिश कर रहे हों, तो आपको यह याद रखना चाहिए कि आपके द्वारा परिभाषित फ्रेमवर्क से लेकर लक्ष्य तक मानसिक मानचित्रण project.json

यह भी संदर्भ नोड के तहत विजुअल स्टूडियो में दिखाई देता है: अनारक्षित निर्भरताएँ

पीले रंग के रूप में चिह्नित नोड अनसुलझे हैं।

ये त्रुटि सूची में भी दिखाई देते हैं:

त्रुटि सूची अनसुलझे निर्भरताएँ

इमारत

ये त्रुटियां भी निर्माण करते समय दिखाई देती हैं। कमांड लाइन से निर्माण करते समय, आउटपुट बहुत ही क्रियात्मक होता है और समस्याओं का निदान करते समय यह बेहद उपयोगी हो सकता है:

> kpm build

Building ClassLibrary39 for DNX,Version=v4.5.1
  Using Project dependency ClassLibrary39 1.0.0
    Source: C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\src\ClassLibrary39\project.json

  Using Assembly dependency framework/mscorlib 4.0.0.0
    Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\mscorlib.dll

  Using Assembly dependency framework/System 4.0.0.0
    Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.dll

  Using Assembly dependency framework/System.Core 4.0.0.0
    Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Core.dll

  Using Assembly dependency framework/Microsoft.CSharp 4.0.0.0
    Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Microsoft.CSharp.dll


Building ClassLibrary39 for DNXCore,Version=v5.0
  Using Project dependency ClassLibrary39 1.0.0
    Source: C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\src\ClassLibrary39\project.json

  Using Package dependency System.Console 4.0.0-beta-22709
    Source: C:\Users\davifowl\.dnx\packages\System.Console\4.0.0-beta-22709
    File: lib\contract\System.Console.dll

  Using Package dependency System.IO 4.0.10-beta-22231
    Source: C:\Users\davifowl\.dnx\packages\System.IO\4.0.10-beta-22231
    File: lib\contract\System.IO.dll

  Using Package dependency System.Runtime 4.0.20-beta-22231
    Source: C:\Users\davifowl\.dnx\packages\System.Runtime\4.0.20-beta-22231
    File: lib\contract\System.Runtime.dll

  Using Package dependency System.Text.Encoding 4.0.10-beta-22231
    Source: C:\Users\davifowl\.dnx\packages\System.Text.Encoding\4.0.10-beta-22231
    File: lib\contract\System.Text.Encoding.dll

  Using Package dependency System.Threading.Tasks 4.0.10-beta-22231
    Source: C:\Users\davifowl\.dnx\packages\System.Threading.Tasks\4.0.10-beta-22231
    File: lib\contract\System.Threading.Tasks.dll

आउटपुट संकुल और परियोजना संदर्भों से संकलक में पारित सभी विधानसभाओं को दर्शाता है। जब आप बिल्ड विफलताओं को प्राप्त करना शुरू करते हैं, तो यह सुनिश्चित करना उपयोगी है कि आप जिस पैकेज का उपयोग कर रहे हैं, वह वास्तव में उस लक्ष्य प्लेटफॉर्म पर काम करता है।

यहां एक पैकेज का उदाहरण दिया गया है जो dnxcore50 पर काम नहीं करता है:

{
    "version": "1.0.0-*",
    "dependencies": {
        "Microsoft.Owin.Host.SystemWeb": "3.0.0"
    },

    "frameworks": {
        "dnx451": {
            "dependencies": {
            }
        },
        "dnxcore50": {
            "dependencies": {
                "System.Console": "4.0.0-beta-22709"
            }
        }
    }
}

Microsoft.Owin.Host.SystemWeb संस्करण 3.0.0 में ऐसी कोई असेंबली नहीं है जो dnxcore50 पर चलती है (अनज़िप्ड पैकेज के लीबर फ़ोल्डर पर नज़र डालें)। जब हम चलाते हैं kpm build:

Dnxcore50 पर असेंबलिंग मिस करना

ध्यान दें कि यह "पैकेज Microsoft.win.Host.SystemWeb का उपयोग करता है" लेकिन "फ़ाइल:" नहीं है। यह एक बिल्ड विफलता का कारण हो सकता है।

यहाँ मेरा दिमाग ख़त्म हो जाता है


मैं आपके सुझाव के अनुसार dnu सूची का उपयोग करने की कोशिश कर रहा हूं, यह निर्धारित करने के लिए कि dnx एक निर्भरता को हल नहीं कर सकता है। लेकिन मुझे एक लाल मिल रहा है "Project.json का पता लगाने में असमर्थ"। असेंबली कलाकृतियों फ़ोल्डर में है, "निर्माण पर आउटपुट उत्पन्न" की जाँच करके उत्पन्न। आगे बढ़ने के बारे में कोई सुझाव?
माइक स्कॉट

कलाकृतियों के फ़ोल्डर का किसी चीज़ से क्या लेना-देना है? क्या आपने project.json में निर्भरता का संदर्भ दिया है? क्या वह पैकेज है जिसे आप एक कॉन्फ़िगर फीड पर उपलब्ध करा रहे हैं?
डेविडोफ्लो

17

मुझे अभी भी पूरी तरह से पता नहीं है कि क्या गलत था, लेकिन अब मेरे पास कम से कम चीजों की कोशिश करने के लिए चरणों की एक श्रृंखला है:

  • संदेह होने पर, dnx को पुन: स्थापित करें
    • पैकेज कैश को उड़ाने से मदद मिल सकती है
  • ~/.config/NuGet.configयह सुनिश्चित करने के लिए जांचें कि आप सही नुगेट फ़ीड का उपयोग कर रहे हैं

मैंने यथोचित स्वच्छ तरीके से विभिन्न विकल्पों का परीक्षण करने के लिए निम्न कमांड लाइन का उपयोग किया:

rm -rf ~/.dnx/packages && rm -rf ~/.dnx/runtimes && dnvm upgrade && kpm restore && dnx . kestrel

ऐसा लगता है कि मेरी समस्या वास्तव में निर्भरता के गलत संस्करणों के कारण स्थापित हो रही थी। का एक संस्करण संख्या "1.0.0-beta4"जाहिरा तौर पर करने के लिए काफी अलग है "1.0.0-beta4-*"। उदाहरण के लिए, Kestrelनिर्भरता स्थापित संस्करण 1.0.0-Beta4-11185 जब बस के रूप में निर्दिष्ट किया गया है 1.0.0-beta4, लेकिन -*अंत में संस्करण 1.0.0-beta4-11262 के साथ । मैं beta4स्पष्ट रूप से निर्दिष्ट करना चाहता था कि गलती से बीटा 3 बिल्ड के साथ उपयोग करने से बचें

निम्न प्रोजेक्ट कॉन्फ़िगरेशन ठीक काम करता है:

{
  "dependencies": {
    "Kestrel": "1.0.0-beta4-*",
    "Microsoft.AspNet.Diagnostics": "1.0.0-beta4-*",
    "Microsoft.AspNet.Hosting": "1.0.0-beta4-*",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta4-*",
  },
  "commands": {
    "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"
  },
  "frameworks": {
    "dnx451": {}
  }
}

6
ऐसा इसलिए है क्योंकि -*हमेशा आपको नवीनतम प्रीलीज संस्करण देता है, जबकि इसके बिना आपको सबसे कम संस्करण मिलता है जो सभी निर्भरता को पूरा करता है (जैसा कि नूगेट के साथ सामान्य है)। इस परीक्षण के कुछ उदाहरण हैं।
अलेक्जेंडर कोप्लिंगर ने

2
@ अलेक्जेंडरकोप्िंगर: धन्यवाद, यह समझ में आता है। तो ... बीटा 4 सबसे पुराना बीटा 4 है, जबकि ... बीटा 4- * नवीनतम बीटा 4 है, है ना?
जॉन स्कीट

4
"frameworks": {"dnx451": {}}यह मेरे लिए तय किया था, के लिए कोई जरूरत नहींdnxcore50
vicentedealencar

आपके पहले कमांड ने मुझे बीटा 5 संस्करण पर अटकने में मदद की। मैंने चलाने की कोशिश की dnvm upgrade-self, यह नवीनतम संस्करण में अपग्रेड नहीं होगा। व्यवस्थापक के रूप में VS कमांड प्रॉम्प्ट को चलाने से dnvm संस्करण दिखाई देता है rc1..., हालाँकि जब व्यवस्थापक नहीं था तब beta5...। आपकी कमांड के बाद एडमिन और नॉन एडमिन कमांड प्रॉम्प्ट दोनों को rc2...(नवीनतम) संस्करण के रूप में दिखाया गया है ।
JabberwockyDecompiler 16

मोनो का उपयोग करने वालों के लिए और यह सोचकर कि क्या इस विकल्प को चुनने dnx451या dnxcore50मुझे इस विषय को थोड़ा और समझने में मदद मिली: stackoverflow.com/a/30846048/89590 लघु उत्तर: dnx451मोनो के लिए उपयुक्त है।
नाटे कुक

8

आप एक env var नामित सेट कर सकते हैं DNX_TRACEकरने के लिए 1एक टन अधिक नैदानिक जानकारी देखने के लिए। चेतावनी दी है, यह एक बहुत अधिक जानकारी है!


@JonSkeet BTW अन्य उत्तरों (आपके स्व-उत्तर सहित) में आपके द्वारा सामना की गई विशिष्ट समस्या के निदान और मरम्मत के बारे में बहुत अच्छी जानकारी है। मैंने इस उत्तर को अति संक्षिप्त रखा क्योंकि यह सिर्फ एक और अलग उत्तर है जिससे और अधिक सुराग मिल सकता है क्योंकि समस्या पहले स्थान पर क्यों हुई।
इलोन

बिल्कुल - मैं उस की सराहना करता हूं :)
जॉन स्कीट

3

इसे काम करने के लिए मैंने अपना संशोधित किया project.json.. अब ऐसा दिखता है:

{
"dependencies": {
    "Kestrel": "1.0.0-*",
    "Microsoft.AspNet.Diagnostics": "1.0.0-*",
    "Microsoft.AspNet.Hosting": "1.0.0-*",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-*",
    "Microsoft.AspNet.StaticFiles": "1.0.0-*"
},
"commands": {
    "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5001",
    "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"
},
"frameworks": {
    }
}

कुंजी चौखटे अनुभाग लग रहा था।

इसके अलावा नाम बदल गया है कि कैसे k webकाम करता है ताकि इसकी अभी dnx . webयाdnx . kestrel

अपडेट - थोड़ी और जानकारी

अजीब तरह से, बिना किसी फ्रेमवर्क के चलने के बाद यह परिभाषित हो गया कि मुझे मिलने पर अतिरिक्त सामान का एक गुच्छा मिला है kpm restore:

...
Installing Microsoft.Framework.Logging 1.0.0-beta4-11001
Installing Microsoft.Framework.Logging.Interfaces 1.0.0-beta4-11001
Installing Microsoft.Framework.DependencyInjection.Interfaces 1.0.0-beta4-11010
Installing Microsoft.Framework.DependencyInjection 1.0.0-beta4-11010
Installing Microsoft.Framework.ConfigurationModel 1.0.0-beta4-10976
Installing Microsoft.Framework.ConfigurationModel.Interfaces 1.0.0-beta4-10976
Installing Microsoft.AspNet.Hosting.Interfaces 1.0.0-beta4-11328
Installing Microsoft.AspNet.FeatureModel 1.0.0-beta4-11104
Installing Microsoft.AspNet.Http 1.0.0-beta4-11104
Installing Microsoft.AspNet.FileProviders.Interfaces 1.0.0-beta4-11006
Installing Microsoft.Framework.Caching.Interfaces 1.0.0-beta4-10981
Installing Microsoft.AspNet.FileProviders 1.0.0-beta4-11006
Installing Microsoft.AspNet.Http.Core 1.0.0-beta4-11104
Installing Microsoft.AspNet.WebUtilities 1.0.0-beta4-11104
Installing Microsoft.Net.Http.Headers 1.0.0-beta4-11104
Installing Microsoft.AspNet.Http.Interfaces 1.0.0-beta4-11104
Installing Microsoft.Framework.Runtime.Interfaces 1.0.0-beta4-11257
Installing Microsoft.AspNet.Server.Kestrel 1.0.0-beta4-11262
Installing Microsoft.Net.Http.Server 1.0.0-beta4-11698
Installing Microsoft.Net.WebSockets 1.0.0-beta4-11698
Installing Microsoft.Net.WebSocketAbstractions 1.0.0-beta4-10915
Installing Microsoft.Framework.WebEncoders 1.0.0-beta4-11104
Installing Microsoft.Framework.OptionsModel 1.0.0-beta4-10984
Installing Microsoft.AspNet.Http.Extensions 1.0.0-beta4-11104
Installing Microsoft.AspNet.Diagnostics.Interfaces 1.0.0-beta4-12451
Installing Microsoft.AspNet.RequestContainer 1.0.0-beta4-11328

.. तो ठीक चला। फिर मैंने फ्रेमवर्क सेक्शन में वापस स्विच किया

"frameworks": {
    "dnx451": {}
}

.. और यह अभी भी काम किया है, जबकि इससे पहले कि यह एक त्रुटि को फेंक देगा!

बहुत अजीब!

(Im चल रहा है 1.0.0-beta4-11257)

आगे की अपडेट

मैंने एक नया उबंटू उदाहरण दिया, और आपको भी वही त्रुटि मिली .. मेरा विचार यह था कि यह समस्या केवल पैकेज प्राप्त करने की कोशिश करने के कारण हो सकती है nuget.orgऔर न कि myget.org(जिसमें नई चीजें हैं) इसलिए मैं एक NuGet.Configमें गिरा दिया गया परियोजना की जड़ ।।

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="AspNetVNext" value="https://www.myget.org/F/aspnetvnext/" />
    <add key="NuGet" value="https://nuget.org/api/v2/" />
  </packageSources>
</configuration>

.. ऐसा लगता है कि यह मेरे लिए सही संस्करण (एक के बाद kpm restore) प्राप्त करके तय किया है ।


1
पुन: "dnx। Kestrel" भाग - वास्तव में, इसलिए जो कमांड मैंने दिखाया है :) उस कॉन्फ़िगरेशन के साथ, मुझे एक अलग त्रुटि मिलती है: System.TypeLoadException: 'Microsoft.Framework.D dependencyInjection.LoggingServiceCollectionExtensions' असेंबली 'Microsoft' से टाइप '' को लोड नहीं कर सका। फ्रेमवर्क.लॉगिंग, संस्करण = 1.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = null '। आप DNX के किस संस्करण का उपयोग कर रहे हैं?
जॉन स्कीट

1
जब मैंने "dnx। वेब" किया था, तब पहली बार मुझे मिला: `System.InvalidOperationException: लक्ष्य फ्रेमवर्क 'DNX, संस्करण = v4.5.1' के लिए निम्न निर्भरता को हल करने में विफल रहा और इसने उन चीजों की एक सूची का सुझाव दिया जो यह गायब थी।
स्टीफन पोप

दिलचस्प। यह किस प्लेटफार्म पर है, btw?
जॉन स्कीट

क्या आपने DNX को अपग्रेड करने के बाद पर्यावरण चर को पुनः लोड करने के लिए 'स्रोत ~ / .bashrc' किया था? इसके अलावा मुझे "dnvm अपग्रेड" + "dnvm यूज़ डिफॉल्ट" करना था
स्टीफन पोप

DNX ने .bashrc द्वारा अपडेट नहीं किया था ... संभवतः क्योंकि मैंने इसे कल मैन्युअल रूप से बनाया था। इसके बजाय अद्यतन निर्देशों का उपयोग करने की कोशिश करेंगे ...
जॉन स्कीट

2

इन दिनों, मेरे सभी package.jsonसंस्करण समाप्त हो रहे हैं"-rc2-*"

(केवल अपवाद मैंने अभी तक देखे हैं Microsoft.Framework.Configurationपैकेज हैं, जो "1.0.0-rc1-*"या तो होने की आवश्यकता है "1.0.0-*")

@Davidfowl का उल्लेख करने वाले "संस्करण ट्रेनों" के बारे में, ऐसा लगता है कि बीटा 8 और आरसी 2 के बीच बहुत दर्द गायब हो गया है।

dnvm upgrade -u -arch x64 -r coreclr

मैं coreclrइन 2 NuGet फ़ीड के साथ सबसे अधिक किस्मत पर था :

"https://www.myget.org/F/aspnetvnext/"
"https://nuget.org/api/v2/"

जब मैं ऐसा पैकेज समस्याओं लापता है, समय यह ये वही अपराधियों है के 90%:

Newtonsoft.Json
Ix-Async
Remotion.Linq

ज्यादातर समय, मैं मुख्य NuGet.org फ़ीड को मजबूर करके इन के आसपास प्राप्त कर सकता हूं:

dnu restore;
dnu restore -s https://nuget.org/api/v2

यहाँ मेरा काम कर रहा है config.json:

{
"dependencies": {
    "Microsoft.AspNet.Diagnostics": "1.0.0-rc2-*",
    "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-rc2-*",
    "Microsoft.AspNet.Hosting": "1.0.0-rc2-*",
    "Microsoft.AspNet.Http": "1.0.0-rc2-*",
    "Microsoft.AspNet.Http.Abstractions": "1.0.0-rc2-*",
    "Microsoft.AspNet.Mvc.Core": "6.0.0-rc2-*",
    "Microsoft.AspNet.Mvc.Razor": "6.0.0-rc2-*",
    "Microsoft.AspNet.Owin": "1.0.0-rc2-*",
    "Microsoft.AspNet.Routing": "1.0.0-rc2-*",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc2-*",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-rc2-*",
    "Microsoft.AspNet.Session": "1.0.0-rc2-*",
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc2-*",
    "EntityFramework.Commands": "7.0.0-rc2-*",
    "EntityFramework.Core": "7.0.0-rc2-*",
    "EntityFramework.InMemory": "7.0.0-rc2-*",
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc2-*",
    "EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc2-*",
    "EntityFramework.Relational": "7.0.0-rc2-*",
    "EntityFramework7.Npgsql": "3.1.0-beta8-2",
    "Microsoft.Extensions.Logging.Abstractions": "1.0.0-rc2-*",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc2-*",
    "Microsoft.Extensions.DependencyInjection": "1.0.0-rc2-*",
    "Microsoft.Extensions.DependencyInjection.Abstractions": "1.0.0-rc2-*",
    "Microsoft.Framework.Configuration.CommandLine": "1.0.0-*",
    "Microsoft.Framework.Configuration.EnvironmentVariables": "1.0.0-*",
    "Microsoft.Framework.Configuration.Json": "1.0.0-*"
},
"commands": {
    "ef": "EntityFramework.Commands",
    "dev": "Microsoft.AspNet.Hosting --ASPNET_ENV Development --server Microsoft.AspNet.Server.Kestrel --server.urls http://localhost:5004"
},
"frameworks": {
    "dnxcore50": {}
}
}

उपरोक्त सूची config.json से नहीं है, बल्कि project.json है, लेकिन मैं अभी भी उखाड़ा हुआ हूं क्योंकि सूची ने मुझे उपयोगी निर्भरता प्रदान की है जिसके बारे में मुझे पहले से जानकारी नहीं थी।
रॉन सी

1

मैं निर्भरता गायब मुद्दों के साथ ही dnxcore50 और dnx451 संदर्भों को खुश करने की कोशिश कर रहा था।

अगर मैं इस सही "निर्भरता" को समझता हूं: {} चौखटे के बीच साझा किए जाते हैं।

तब "निर्भरता": {} "फ्रेमवर्क" के भीतर: उस ढांचे के लिए विशिष्ट हैं।

dnxcore50 एक मॉड्यूलर रनटाइम (स्वयं निहित) है, इसलिए इसमें मूल रूप से सभी प्रोग्राम रनटाइम को क्लासिक .net फ्रेमवर्क के विपरीत एक प्रोग्राम चलाने की आवश्यकता होती है, जहां आपके पास कोर निर्भरताएं कहीं और बिखरी हुई हैं।

तो उस के साथ मैंने कहा कि मैं कम से कम दृष्टिकोण से चिपकना चाहता था मैंने कुछ बिंदु पर मैक या लिनक्स पर होस्ट करने का फैसला किया।

अद्यतन Ranshtml विचारों के साथ अजीब निर्भरता के मुद्दों में, अभी के लिए dnx451 के साथ चला गया।

यह मेरा प्रोजेक्ट है

{
"webroot": "wwwroot",
"version": "1.0.0-*",

"dependencies": {
    "System.Runtime": "4.0.10",
    "Microsoft.AspNet.Hosting": "1.0.0-beta4",
    "Microsoft.AspNet.Mvc": "6.0.0-beta4",
    "Microsoft.AspNet.Server.IIS": "1.0.0-beta6-12075",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta6-12457",
    "Microsoft.Framework.DependencyInjection": "1.0.0-beta4",
    "Microsoft.Framework.DependencyInjection.Interfaces": "1.0.0-beta5"
 },

"commands": {
"web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://admin.heartlegacylocal.com"  },

"frameworks": {
"dnx451": { }
 }
},

"publishExclude": [
"node_modules",
"bower_components",
"**.xproj",
"**.user",
"**.vspscc"
],
"exclude": [
  "wwwroot",
  "node_modules",
  "bower_components"
  ]
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.