ভাল প্রশ্ন. আপনার নির্দিষ্ট সমস্যার জন্য, দেখে মনে হচ্ছে আপনার সমাধান হওয়া নির্ভরতাগুলিতে আপনার কোনও মিল নেই। যখন এই জাতীয় জিনিসগুলি ঘটে থাকে সম্ভবত এটি কারণ আপনি আপনার অ্যাপ্লিকেশনটিকে একটি বেমানান ডিএনএক্সে চালাচ্ছেন। আমরা এখনও খুব বড় ব্রেকিং পরিবর্তন করছি তাই আপনি যদি কখনও পদ্ধতিটি অনুপস্থিত প্রকারের অনুপস্থিত দেখতে পান তবে আপনার 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
:
লক্ষ্য করুন এটিতে "প্যাকেজ মাইক্রোসফ্ট.উইন.হোস্ট.সিস্টেমওয়েব" ব্যবহার করা হয়েছে তবে "ফাইল:" নেই। এটি বিল্ড ব্যর্থতার কারণ হতে পারে।
এখানে আমার মস্তিষ্কের ডাম্প শেষ হয়