কীভাবে আমি ডিএনএক্সে অনুপস্থিত নির্ভরতা (বা অন্যান্য লোডার ব্যর্থতা) সনাক্ত করতে পারি?


133

আমি কেষ্টারেল ব্যবহার করে ডিএনএক্সে এএসপি.নেট ভিএনেক্সটের জন্য হ্যালোইব নমুনার একটি পরিবর্তিত সংস্করণ চালানোর চেষ্টা করছি । আমি বুঝতে পারি যে এটি রক্তপাতের প্রান্তে খুব বেশি, তবে আমি আশা করব যে এএসপি.এনইটি টিম কমপক্ষে সহজতম সম্ভাব্য ওয়েব অ্যাপ্লিকেশনটি কাজ করে রাখবে :)

পরিবেশ:

  • লিনাক্স (উবুন্টু, অনেক বেশি)
  • মনো 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/Asorses- সংক্ষিপ্ত- অভ্যন্তরীণ আপনার সমাবেশের নিরপেক্ষ ইন্টারফেসের লিঙ্ক বা অন্য কোথাও লিঙ্ক করবেন? যেহেতু এটি বর্তমানে নষ্ট হয়েছে
সিজিজেবেল

@ সিজিজবেলস: ধন্যবাদ - আমি আসলে ডেভিডফাউল ডেস্কটপ / ন্যাশনাল-ইনটারালফেরেসের সাথে লিঙ্কটি বোঝাতে চাইছিলাম তবে আপনার লিঙ্কটি সম্ভবত এটি আরও ভাল ...
জন স্কিটি

@ জোনস্কিট অ্যাসেমব্লিক নিরপেক্ষ ইন্টারফেস এখন শেষ।
টুবার্ক

@ টগবার্ক: গোশ, সত্যি? এটি আকর্ষণীয় - আপনার একটি লিঙ্ক আছে যা আমি কোনও সম্পাদনাতে অন্তর্ভুক্ত করতে পারি?
জন স্কিটি

উত্তর:


144

ভাল প্রশ্ন. আপনার নির্দিষ্ট সমস্যার জন্য, দেখে মনে হচ্ছে আপনার সমাধান হওয়া নির্ভরতাগুলিতে আপনার কোনও মিল নেই। যখন এই জাতীয় জিনিসগুলি ঘটে থাকে সম্ভবত এটি কারণ আপনি আপনার অ্যাপ্লিকেশনটিকে একটি বেমানান ডিএনএক্সে চালাচ্ছেন। আমরা এখনও খুব বড় ব্রেকিং পরিবর্তন করছি তাই আপনি যদি কখনও পদ্ধতিটি অনুপস্থিত প্রকারের অনুপস্থিত দেখতে পান তবে আপনার betaXপ্যাকেজ এবং betaYডিএনএক্স বা বিপরীতে চলার সম্ভাবনা রয়েছে ।

আরও সুনির্দিষ্টভাবে, বিসা 4-তে এসেম্বলি নিউট্রাল ইন্টারফেসগুলি সরানো হয়েছে তবে দেখে মনে হচ্ছে আপনি যে অ্যাপ্লিকেশনটি চালাচ্ছেন সেগুলি এখনও সেগুলি ব্যবহার করছে।

এটি তৈরির জন্য আমাদের পরিকল্পনা রয়েছে যাতে ত্রুটি বার্তাকে আরও স্পষ্ট করতে প্যাকেজগুলি ন্যূনতম ডিএনএক্স চিহ্নিত করতে পারে যা তাদের চালানোর প্রয়োজন। সময় যত যাচ্ছে ততই ব্রেকিং পরিবর্তন মরে যাবে।

যদিও সাধারণভাবে, আমার মনে হয় সময়টি যখন dnx ব্যবহার করার সময় এই জাতীয় সমস্যাগুলি কীভাবে নির্ণয় করা যায় সে সম্পর্কে একটি গাইড লিখেছি (যেহেতু এটি বিদ্যমান বিদ্যমান থেকে নেট থেকে আলাদা)।

আপনি যে নির্ভরতাগুলি রেখেছেন তা project.jsonকেবল শীর্ষ স্তরের are সংস্করণগুলি সর্বদা সর্বনিম্ন হয় (এটি ঠিক একটি নিউগেট প্যাকেজের মতো)। এর অর্থ হ'ল আপনি নির্দিষ্ট করার সময় আপনি Foo 1.0.0-beta4সত্যই নির্দিষ্ট করে নিচ্ছেন Foo >= 1.0.0-beta4। এর অর্থ যদি আপনি জিজ্ঞাসা করেন MVC 0.0.1এবং আপনার কনফিগার করা ফিডের সর্বনিম্ন সংস্করণগুলি হয় তবে MVC 3.0.0আপনি এটি পেয়ে যাবেন। আপনার সংস্করণটি নির্দিষ্ট না করা পর্যন্ত আমরা কখনও ভাসতে পারি না। আপনি যদি 1.0.0 এর জন্য জিজ্ঞাসা করেন এবং এটি বিদ্যমান থাকে তবে নতুন সংস্করণ বিদ্যমান থাকলেও আপনি 1.0.0 পাবেন। খালি সংস্করণ উল্লেখ করা সবসময়ই খারাপ এবং পরে বিল্ডগুলিতে তা নিষিদ্ধ করা হবে।

এখানে একটি নতুন বৈশিষ্ট্য রয়েছে যা আমরা ভাসমান সংস্করণ নামে নুগেটের সাথে পরিচয় করিয়ে দিচ্ছি। আজ এটি কেবল পূর্বরক্ষিত ট্যাগে কাজ করে তবে পরবর্তী সংস্করণে এটি সংস্করণের আরও অংশে কাজ করবে। এটি প্যাকেজ স্পেসিফিকেশন ফাইলের সংস্করণ রেঞ্জ নির্দিষ্টকরণের জন্য এনপিএম এবং মণি সিনট্যাক্সের মতো।

1.0.0-*- মানে আমাকে উপসর্গের সাথে উচ্চারণের সাথে উচ্চতর সংস্করণ দেয় ( শব্দার্থক সংস্করণের নিয়ম অনুসারে ) বা যদি এই উপসর্গের সাথে কোনও মিল নেই তবে সাধারণ আচরণ ব্যবহার করুন এবং আমাকে নিম্নতম সংস্করণ> = নির্দিষ্ট সংস্করণটি পান।

আপনি সর্বশেষ বিল্ডগুলিতে পুনরুদ্ধার চালানোর সময়, এটি ডাকা একটি ফাইল লিখবে project.lock.json। এই ফাইলটিতে সংজ্ঞায়িত সমস্ত টার্গেট ফ্রেমওয়ার্কের জন্য নির্ভরশীলতার ট্রানজিটিভ ক্লোজার থাকবে project.json

যখন এর মতো কিছু ব্যর্থ হয় আপনি নিম্নলিখিতগুলি করতে পারেন:

ব্যবহার করে সমাধান হওয়া নির্ভরতাগুলি একবার দেখুন kpm list। এটি আপনাকে আপনার প্রকল্প দ্বারা রেফারেন্সযুক্ত প্যাকেজগুলির সংশোধিত সংস্করণগুলি দেখায় এবং কী নির্ভরতা এটিকে টানত eg

একজন
  -> খ
বি
 ->

আসল কেপিএম তালিকা আউটপুট:

ClassLibrary39 এর জন্য তালিকাভুক্তি (সি: \ ব্যবহারকারীগণ av দ্যাভিওল \ ডকুমেন্টস \ ভিজ্যুয়াল স্টুডিও 14 \ প্রকল্পগুলি \ শ্রেণিবদ্ধ 39 \ এসসিআর \ শ্রেণিবদ্ধজীবন 39 \ প্রজেক্ট.জসন)

[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

* এর অর্থ প্রত্যক্ষ নির্ভরতা।

যদি আপনার একটি কার্যক্ষম ভিজ্যুয়াল স্টুডিও থাকে (যা এই মুহুর্তে ডিএনএক্সের সাথে ব্রেক হয়) তবে আপনি রেফারেন্স নোডটি দেখতে পারেন। এটিতে একইভাবে উপাত্তভাবে উপস্থাপিত ডেটা রয়েছে:

রেফারেন্স নোড

একটি নির্ভরতা ব্যর্থতা দেখতে কেমন তা দেখি:

এখানে প্রকল্প.জসন

{
    "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অস্তিত্ব নেই সুতরাং চলমান কেপিএম পুনরুদ্ধার নিম্নলিখিতগুলি দেখায়:

এখানে চিত্র বর্ণনা লিখুন

পুনরুদ্ধার কখন ব্যর্থ হতে পারে তা নির্ণয় করার সময়, করা HTTP অনুরোধগুলি দেখুন, তারা আপনাকে জানান যে প্যাকেজ উত্সগুলি কেপিএম দেখেছিল above উপরের চিত্রটিতে লক্ষ্য করুন, একটি CACHEঅনুরোধ আছে। এটি রিসোর্সের ধরণের (নুপকিজি বা নুসপেক) ভিত্তিতে ক্যাশেড ইন বিল্ট এবং এতে একটি কনফিগারযোগ্য টিটিএল রয়েছে (দেখুন kpm restore --help)। আপনি যদি kpmরিমোট নুগেট উত্সগুলিতে আঘাত করতে বাধ্য করতে চান তবে --no-cacheপতাকাটি ব্যবহার করুন :

কেপিএম পুনরুদ্ধার - না-ক্যাশে

এই ত্রুটিগুলি প্যাকেজ পরিচালক লগ আউটপুট উইন্ডোতে ভিজ্যুয়াল স্টুডিওতেও প্রদর্শিত হবে:

এখানে চিত্র বর্ণনা লিখুন

সাইড নোট!

প্যাকেজ উত্স

আমি এখনই নুগেট.কমফিগের যেভাবে কাজ করে তা বর্ণনা করব (যা ভবিষ্যতে সম্ভবত পরিবর্তিত হবে)। ডিফল্টরূপে আপনাকে ডিফল্ট NuGet.org সোর্সে বিশ্বব্যাপী কনফিগার সঙ্গে একটি NuGet.config আছে %appdata%\NuGet\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কারণ এটি তালিকাভুক্ত নির্ভরতাগুলি খুঁজে পাচ্ছে না।

আপনি যদি ভুল ডিএনএক্স গন্ধটি চালাচ্ছেন তবে আপনি এই ত্রুটিটি পেয়ে যাওয়ার আরও একটি কারণ। যদি আপনার অ্যাপ্লিকেশনটি কেবল dnx451 নির্দিষ্ট করে এবং আপনি কোরসিএলআর ডিএনএক্স চালানোর চেষ্টা করেন, আপনিও অনুরূপ সমস্যা দেখতে পাবেন। ত্রুটি বার্তায় লক্ষ্য কাঠামোর দিকে মনোযোগ দিন:

চলমান জন্য:

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"
            }
        }
    }
}

মাইক্রোসফ্ট.উইন.হোস্ট.সিস্টেমওয়েব সংস্করণ 3.0.০.০ এর কোনও অ্যাসেমসলি নেই যা dnxcore50 এ চলে (আনজিপড প্যাকেজের লিব ফোল্ডারটি একবার দেখুন)। যখন আমরা চালাব kpm build:

Dnxcore50 এ অ্যাসেমব্লি হারিয়েছে

লক্ষ্য করুন এটিতে "প্যাকেজ মাইক্রোসফ্ট.উইন.হোস্ট.সিস্টেমওয়েব" ব্যবহার করা হয়েছে তবে "ফাইল:" নেই। এটি বিল্ড ব্যর্থতার কারণ হতে পারে।

এখানে আমার মস্তিষ্কের ডাম্প শেষ হয়


আপনার পরামর্শ অনুসারে আমি dnu তালিকা ব্যবহার করার চেষ্টা করছি, কেন dnx নির্ভরতা সমাধান করতে পারে না তা নির্ধারণ করার জন্য। তবে আমি একটি লাল "প্রকল্প.জসন সনাক্ত করতে অক্ষম" পেয়ে যাচ্ছি। "বিল্ডে উত্পাদনের আউটপুট" যাচাই করে সমাবেশটি হস্তশিল্প ফোল্ডারে থাকে। কিভাবে অগ্রসর করার উপর কোন পরামর্শ?
মাইক স্কট

শিল্পকর্মগুলির ফোল্ডারের কোনও কিছুর সাথে কী সম্পর্ক আছে? আপনি কি প্রকল্প.জসনে নির্ভরতা উল্লেখ করেছেন? আপনি যে প্যাকেজটি উল্লেখ করছেন সেটি কি কনফিগার করা ফিডে উপলব্ধ?
ডেভিডফোল

17

ভুলটি কী ছিল তা আমি এখনও পুরোপুরি জানি না , তবে কমপক্ষে জিনিসগুলি চেষ্টা করা সহজ করার জন্য আমার এখন কয়েকটি ধাপ রয়েছে:

  • সন্দেহ হলে ডিএনএক্স পুনরায় ইনস্টল করুন
    • প্যাকেজ ক্যাশে দূরে সরিয়ে ফেলা সহায়ক হতে পারে
  • ~/.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
হত

আপনার প্রথম কমান্ড আমাকে বিটা 5 সংস্করণে আটকে থাকতেও সহায়তা করেছিল। আমি দৌড়ানোর চেষ্টা করেছি dnvm upgrade-self, এটি সর্বশেষতম সংস্করণে আপগ্রেড হবে না। অ্যাডমিন হিসাবে ভিএস কমান্ড প্রম্পট চালানোর ফলে ডিএনভিএম সংস্করণটি প্রদর্শিত হয়েছিল rc1..., তবে অ্যাডমিন হিসাবে যখন ছিল না beta5...। আপনার কমান্ডের পরে অ্যাডমিন এবং নন অ্যাডমিন উভয় কমান্ড অনুরোধ জানায় rc2...(সর্বশেষ) সংস্করণ হিসাবে।
জ্যাবারওয়কিডেকম্পেলার

যারা মনো ব্যবহার করছেন এবং এই উত্তরটি চয়ন করতে dnx451বা dnxcore50এই উত্তরটি আমাকে এই বিষয়টিকে আরও কিছুটা বুঝতে সহায়তা করেছে কিনা তা নিয়ে ভাবছেন : stackoverflow.com/a/30846048/89590 সংক্ষিপ্ত উত্তর: মনোরdnx451 জন্য উপযুক্ত।
নেট কুক

8

আপনি একটি env Var নামে সেট করতে পারেন DNX_TRACEকরার 1একটি টন আরও ডায়গনিস্টিক তথ্য দেখতে। সতর্ক হোন, এটি আরও অনেক তথ্য!


@ জোনস্কিট বিটিডাব্লু অন্যান্য উত্তরগুলিতে (আপনার স্ব-উত্তর সহ) আপনি যে নির্দিষ্ট সমস্যার মুখোমুখি হয়েছিলেন তা নির্ণয় এবং মেরামত করার জন্য দুর্দান্ত তথ্য রয়েছে। আমি এই উত্তরটিকে অতি সংক্ষিপ্ত করে রেখেছি কারণ এটি কেবলমাত্র অন্যরকম একটি উত্তর যা আরও প্রথম দিকে কারণ হতে পারে যে সমস্যাটি প্রথম স্থানে কেন ঘটেছে তা নিয়ে যেতে পারে।
আইলন

একেবারে - আমি প্রশংসা করি :)
জন স্কিটি

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": {}
}

.. এবং এটি এখনও কাজ করে, যদিও এর আগে এটি একটি ত্রুটি ছুঁড়ে মারত!

খুব অদ্ভুত!

(আমি চলছে 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। কেস্ট্রেল" অংশটি পুনরায় করুন - প্রকৃতপক্ষে, আমি যে কমান্ডটি দেখিয়েছি :) সেই কনফিগারেশনের সাহায্যে আমি একটি পৃথক ত্রুটি পেয়েছি: System.TypeLoadException: সমাবেশ 'মাইক্রোসফ্ট থেকে' মাইক্রোসফ্ট.ফ্রেমওয়ার্ক.ডেপেন্ডেনসিআইজেক্ট.লগিংস সার্ভিস কালেকশন এক্সটেনশন 'লোড করা যায়নি। ফ্রেমওয়ার্ক.লগিং, সংস্করণ = 1.0.0.0, সংস্কৃতি = নিরপেক্ষ, পাবলিককি টোকেন = নাল '। আপনি ডিএনএক্স এর কোন সংস্করণ ব্যবহার করছেন?
জন স্কিটি

1
আমি যখন প্রথমবার "ডিএনএক্স। ওয়েব" করেছিলাম:। সিস্টেম.আইনডিয়োপ্পেশন এক্সপেশন: টার্গেট ফ্রেমওয়ার্ক 'ডিএনএক্স, সংস্করণ = v4.5.1' এর জন্য নিম্নলিখিত নির্ভরতাগুলি সমাধান করতে ব্যর্থ হয়েছে এবং এটি যে জিনিসগুলি হারিয়েছিল তার একটি তালিকা প্রস্তাব করেছিল suggested
স্টিফেন পোপ

মজাদার. এটি কোন প্ল্যাটফর্মের উপর রয়েছে, বিটিডব্লিউ?
জন স্কিটি

আপনি ডিএনএক্স আপগ্রেড করার পরে কি পরিবেশের ভেরিয়েবলগুলি পুনরায় লোড করার জন্য 'উত্স ~ / .bashrc' করেছিলেন? এছাড়াও আমাকে "ডিএনভিএম আপগ্রেড" করতে হয়েছিল + "ডিএনভিএম ডিফল্ট ব্যবহার"
স্টিফেন পোপ

DNX .bashrc দ্বারা আপডেট করা হয়নি ... সম্ভবত গতকাল আমি নিজে এটি তৈরি করেছি। পরিবর্তে আপডেট নির্দেশাবলী ব্যবহার করার চেষ্টা করবে ...
জন স্কিটি

2

এই দিনগুলিতে, আমার সমস্ত package.jsonসংস্করণ শেষ হবে"-rc2-*"

(কেবলমাত্র আমি এখনও অবধি ব্যতিক্রমগুলি Microsoft.Framework.Configurationপ্যাকেজগুলির মধ্যে রয়েছি , যা উভয়ই হতে পারে "1.0.0-rc1-*"বা "1.0.0-*")

@ ডেভিডফাউলের ​​উল্লেখ করা "সংস্করণ ট্রেনগুলি" সম্পর্কে, মনে হয় বিটা 8 এবং আরসি 2 এর মধ্যে প্রচুর ব্যথা অদৃশ্য হয়ে গেছে।

dnvm upgrade -u -arch x64 -r coreclr

coreclrএই 2 নুগেট ফিডের সাথে আমি সবচেয়ে ভাগ্য পেয়েছি :

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

যখন আমি কি প্যাকেজ সমস্যার অনুপস্থিত থাকে, সময় এটি এই একই অপরাধীদের এর 90%:

Newtonsoft.Json
Ix-Async
Remotion.Linq

বেশিরভাগ সময়, আমি মূল নুগেট.আর.গ. ফিডটি জোর করে এইগুলি পেতে পারি:

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

এখানে আমার ওয়ার্কিং কনফিগারেশন রয়েছে: জেসন:

{
"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": {}
}
}

উপরের তালিকাটি কনফিগারেশন থেকে নয় বরং প্রজেক্ট.জসন থেকে এসেছে তবে আমি এখনও উপস্থাপন করেছি কারণ তালিকাগুলি আমাকে দরকারী নির্ভরশীলতা দিয়েছিল যা সম্পর্কে আমি আগে জানতাম না।
রন সি

1

Dnxcore50 এবং dnx451 উল্লেখগুলি সন্তুষ্ট করার চেষ্টা করার সাথে সাথে আমার নির্ভরতা অনুপস্থিত সমস্যা ছিল।

যদি আমি এই সঠিক "নির্ভরতা" বুঝতে পারি: {the ফ্রেমওয়ার্কগুলির মধ্যে ভাগ করা হয়।

তারপরে "নির্ভরতা": frame the "ফ্রেমওয়ার্কগুলি" এর মধ্যে: সেই কাঠামোর সাথে নির্দিষ্ট।

dnxcore50 একটি মডিউল রানটাইম (স্ব অন্তর্ভুক্ত) তাই এটিতে মূলত সমস্ত মূল রানটাইমগুলি ক্লাসিক। নেট ফ্রেমওয়ার্কের বিপরীতে একটি প্রোগ্রাম চালানো দরকার যেখানে আপনার অন্যত্র ছড়িয়ে থাকা মূল নির্ভরতা রয়েছে core

তাই বলেছিলাম যে আমি ন্যূনতম পদ্ধতির সাথে লেগে থাকতে চাইছি যদিও আমি কোনও সময়ে ম্যাক বা লিনাক্সে হোস্ট করার সিদ্ধান্ত নিয়েছি।

আপডেট সিএসটিএমএল ভিউ সহ অদ্ভুত নির্ভরতা ইস্যুতে ছড়িয়ে পড়ে, আপাতত 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"
  ]
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.