কোন নেট অ্যাপ্লিকেশনটির নির্ভরতা কীভাবে নির্ধারণ করব?


106

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

উত্তর:


94

নির্ভরতা ওয়াকার সাধারণ উইন 32 বাইনারিগুলিতে কাজ করে। সমস্ত .NET dll এবং exeপিসের একটি ছোট স্টাব শিরোনাম অংশ রয়েছে যা এগুলিকে সাধারণ বাইনারিগুলির মতো দেখায়, তবে এটি মূলত যা বলেছে তা হল "সিএলআর লোড করুন" - সুতরাং নির্ভরতা ওয়াকার আপনাকে যা বলবে তা হ'ল।

আপনার। নেট অ্যাপটি আসলে কোন জিনিসগুলির উপর নির্ভর করে তা দেখতে আপনি রেড গেট থেকে দুর্দান্তভাবে দুর্দান্ত। নেট প্রতিফলক ব্যবহার করতে পারেন । (সম্পাদনা: নোট করুন। নেট প্রতিফলক এখন একটি অর্থ প্রদেয় পণ্য। ILSpy বিনামূল্যে এবং ওপেন উত্স এবং খুব অনুরূপ।)

এতে আপনার ডিএলএলটি লোড করুন, ডান ক্লিক করুন এবং 'বিশ্লেষণ' বেছে নিন - এরপরে আপনি একটি "নির্ভর করে" আইটেমটি দেখতে পাবেন যা আপনাকে প্রয়োজনীয় অন্যান্য সমস্ত dll এর (এবং সেই dll এর অভ্যন্তরীণ পদ্ধতিগুলি) প্রদর্শন করবে।

এটি কখনও কখনও তত্পর হয়ে উঠতে পারে যদিও এতে আপনার অ্যাপ্লিকেশনটি এক্স ডিলের উপর নির্ভর করে এবং এক্স ডেল উপস্থিত রয়েছে, তবে যে কোনও কারণেই বোঝা যায় না বা রানটাইমের সময় অবস্থিত হতে পারে না।

এই ধরণের সমস্যাগুলির সমাধানের জন্য, মাইক্রোসফ্টের একটি অ্যাসেম্বলি বাইন্ডিং লগ ভিউয়ার রয়েছে যা রানটাইমে কী চলছে তা আপনাকে দেখাতে পারে


আমি মনে করি আপনি সেই URL টির কিছুটা মিস করেছেন -। এসপিএক্স লিঙ্কের পাঠ্যে যুক্ত হয়েছে। আমি যদিও এটি খুঁজে পেতে পরিচালিত।
ব্রায়ান স্টুয়ার্ট

ওহ ... হ্যাঁ মার্কডাউন কন্ট্রোল ইউআরএলগুলিতে বন্ধনী খায়, এবং দুর্ভাগ্যক্রমে এমএসডিএন তার সমস্ত ইউআরএলগুলিতে (ভিএস 80) রাখে :-(
এডওয়ার্ডস ২

44
নোট করুন যে ২০১১ সালের গোড়ার দিকে। নেট প্রতিস্থাপনকারী আর মুক্ত নয়। ওপেন সোর্স আইএলএসপিএস প্রকল্পটি একই রকম।
yoyo

1
অ্যাসেম্বলি বাইন্ডিং লগ ভিউ v4.0.30319.1 সম্পূর্ণ অব্যবহার্য। লগ এন্ট্রিগুলি কালানুক্রমিক ক্রমে প্রদর্শিত হয় না এবং আপনি সেগুলি বাছাই করতে পারবেন না। এটি এমন পাথগুলি প্রদর্শন করে যা দর্শকের সাথে খাপ খায় না এবং আপনি এটির আকার পরিবর্তন করতে পারবেন না। এটি সময়ের সম্পূর্ণ অপচয়।
নিউট্রিনো

dependencywalker.com আপনার উল্লিখিত জিনিসগুলির url অন্তর্ভুক্ত করা উচিত, এসএসপি। যদি তারা কাজ করে।
টুডমো

54

লোড এসেম্বলিসহ সমস্যাগুলি সমাধান করার জন্য আমি ছোট ইউটিলিটি AsmSpy একটি অমূল্য সরঞ্জামটি খুঁজে পাই । এটি অ্যাসেম্বলি সংস্করণগুলি সহ পরিচালিত সমাবেশগুলির সমস্ত সমাবেশ রেফারেন্স তালিকাভুক্ত করে।

.dllনিম্নলিখিত আর্গুমেন্ট সহ ডিরেক্টরিতে এটি একটি কমান্ড প্রম্পটে চালান :

asmspy . all

অসম্পূর্ণ আউটপুট স্ক্রিনশট

চকোলেটির সাহায্যে এটি দ্রুত ইনস্টল করুন:

choco install asmspy

এটি সি # ফাইলগুলিতে বা রেজারের ভিউগুলিতেও কাজ করতে পারে? আমি রান সময়ে এমভিসি প্রকল্প থেকে কিছু ভিউ এবং একটি নিয়ামক রফতানি করে একটি উপ প্রকল্প তৈরি করছি। এবং আমি জানতে চাই যে এই ভিউগুলি এবং নিয়ামক দ্বারা কী নির্ভরশীলতাগুলির প্রয়োজনীয়তা রয়েছে যাতে আমি সাব-প্রকল্পকে আইআইএস-তে একটি পৃথক ওয়েব প্রকল্প হিসাবে প্রকাশযোগ্য করে তুলতে রান সময়ও এই নির্ভরতাগুলি অনুলিপি করতে পারি।
রূপেন্দ্র

25

ILDASM এ অ্যাসেম্বলি ফাইলটি খুলুন এবং ম্যানিফয়েস্টে .অসাধারণ বাহ্যিক @ টি দেখুন


1
আমি কি নির্ভরশীল সমাবেশগুলির সংস্করণটি এইভাবে দেখতে পারি? আমি কেবল নির্ভরতার নাম দেখি, এটির সংস্করণও নয়।
মাইকেল আর

আসলে, হ্যাঁ, "ম্যানিফেস টি" ক্লিক করার পরে আমিও নির্ভরশীল অ্যাসেম্বলির সংস্করণটি দেখতে পাচ্ছি
মাইকেল আর

1
আমি এটিকে পছন্দ করি - যদি আপনি কোনও পরিবেশ পরিবেশে কাজ করেন তবে কোনও অতিরিক্ত ইউটিলিটি ডাউনলোড করার দরকার নেই
ড্যান ফিল্ড

তৃতীয় পক্ষের অ্যাপ ক্র্যাশটি ডিবাগ করার সময়, কীভাবে কেবল গ্রাহককে ইল্ডসম ইনস্টল করবেন?
রিয়েলটিবো

18

.NET কোড নির্ভরতাগুলি ব্রাউজ করতে, আপনি এনডিপেন্ডেড সরঞ্জামটির সক্ষমতা ব্যবহার করতে পারেন। সরঞ্জামটি প্রস্তাব করে:

উদাহরণস্বরূপ এই জাতীয় কোয়েরিটি দেখতে পাবেন:

from m in Methods 
let depth = m.DepthOfIsUsing("NHibernate.NHibernateUtil.Entity(Type)") 
where depth  >= 0 && m.IsUsing("System.IDisposable")
orderby depth
select new { m, depth }

এবং এর ফলাফলটি দেখে মনে হচ্ছে: (কোড মেট্রিক গভীরতার দিকে লক্ষ্য করুন , 1 প্রত্যক্ষ কলারদের জন্য 1, প্রত্যক্ষ কলার কলারদের জন্য 2)) (কোনও কল গ্রাফে ক্যোয়ারির ফলাফল রফতানি করার জন্য গ্রাফের এক্সপোর্টেও লক্ষ্য করুন )

সি # লিনকিউ ক্যোয়ারির মাধ্যমে ব্রাউজ করছে এনডিপেন্ডেন্ট নির্ভরতা

নির্ভরতা গ্রাফটি দেখতে:

এনডিপেন্ডেন্ট ডিপেন্ডেন্সি গ্রাফ

নির্ভরতা ম্যাট্রিক্স দেখে মনে হচ্ছে:

এনডিপেন্ডেন্ট ডিপেন্ডেন্সি ম্যাট্রিক্স

নির্ভরতা ম্যাট্রিক্স হয় ডি ফ্যাক্টো গ্রাফ কম স্বজ্ঞাত, কিন্তু এটা আরো ভালো কোডের জটিল বিভাগে ব্রাউজ উপযুক্ত হল:

এনডিপেন্ডে ম্যাট্রিক্স বনাম গ্রাফ

দাবি অস্বীকার: আমি এনডিপেন্ডেন্টের পক্ষে কাজ করি


2
প্যাট্রিক সম্ভবত উল্লেখ করেছিলেন যে তিনি সেই দুর্দান্ত সরঞ্জামটির লেখক;)। এটি সত্যই পরীক্ষা করে দেখার মতো। এটি লেখার জন্য +1!
মিচ গম

1
আরে, আমি কেবল এটি নিজেই লক্ষ্য করেছি। আমি তার ব্লগ পোস্টগুলি পড়তে উপভোগ করি - আমাকে এনডিপেন্ড করে চেষ্টা করতে হবে!
ব্রায়ান স্টুয়ার্ট 21

2
@ মিচওয়েট - নাম হা হা পরীক্ষা করে দেখছে, "এনডিপেন্ড দল থেকে প্যাট্রিক"
কায়লিফ্রাই_ডেক ২eck

আমি কি ভিস্টুডিও দিয়ে ব্যবহার করতে পারি? আমার পিসিতে নয় তৃতীয় পক্ষের অ্যাপ্লিকেশনগুলির ক্র্যাশগুলি ডিবাগ করতে
রিয়েলটিবো

16

আপনার শেয়ারওয়ার অ্যাপস বা সরঞ্জামগুলি ডাউনলোড এবং ইনস্টল করার দরকার নেই। আপনি নেট প্রোগ্রাম ব্যবহার করে এটি প্রোগ্রামিকভাবে করতে পারেনAssembly.GetReferencedAssemblies()

Assembly.LoadFile(@"app").GetReferencedAssemblies()

9
ডিবাগ করার উদ্দেশ্যে, এটি PowerShell মাধ্যমে এই কাজ করতে আরও বেশি সুবিধাজনক আছে: [Reflection.Assembly]::LoadFile('C:\absolute\path\to\my.dll').GetReferencedAssemblies()। সরঞ্জামগুলির জন্য অস্পষ্ট উইন্ডোজ অবস্থানগুলি ডাউনলোড বা শিকার না করার দুর্দান্ত সুবিধা রয়েছে। +1
jpmc26

3
আমি ভুল হলে আমাকে সংশোধন করে তবে এটি আপনাকে কেবল একই ত্রুটিটি দেবে যা অনুপস্থিত নির্ভরতার সাথে আপনার অ্যাপ্লিকেশনটি খুব কার্যকর নয়
জে কে।

এটি কেবল তখন কার্যকর হয় যখন অ্যাসেম্বলিটি অ্যাপডোমায়নে লোড হয়। প্রতিবিম্বের জন্য লোড করা সমাবেশগুলি একটি নাল সেট দেয়।
ডেভিড এ। গ্রে

7

আপনি মনো টুলচেইন ব্যবহার করে থাকেন, আপনি ব্যবহার করতে পারেন ইউটিলিটি সঙ্গে সমাবেশ একটি .NET এর নির্ভরতা তালিকা যুক্তি। এটি উভয় এবং ফাইলগুলিতে কাজ করবে ।monodis--assemblyref.exe.dll

ব্যবহারের উদাহরণ:

monodis --assemblyref somefile.exe

উদাহরণ আউটপুট (.exe):

$ monodis --assemblyref monop.exe
AssemblyRef Table
1: Version=4.0.0.0
    Name=System
    Flags=0x00000000
    Public Key:
0x00000000: B7 7A 5C 56 19 34 E0 89
2: Version=4.0.0.0
    Name=mscorlib
    Flags=0x00000000
    Public Key:
0x00000000: B7 7A 5C 56 19 34 E0 89

উদাহরণ আউটপুট (। Dll):

$ monodis --assemblyref Mono.CSharp.dll
AssemblyRef Table
1: Version=4.0.0.0
    Name=mscorlib
    Flags=0x00000000
    Public Key:
0x00000000: B7 7A 5C 56 19 34 E0 89
2: Version=4.0.0.0
    Name=System.Core
    Flags=0x00000000
    Public Key:
0x00000000: B7 7A 5C 56 19 34 E0 89
3: Version=4.0.0.0
    Name=System
    Flags=0x00000000
    Public Key:
0x00000000: B7 7A 5C 56 19 34 E0 89
4: Version=4.0.0.0
    Name=System.Xml
    Flags=0x00000000
    Public Key:
0x00000000: B7 7A 5C 56 19 34 E0 89

5

অ্যাসেম্বলি বাইন্ডিং লগিং সক্ষম করুন এইচকেএলএম \ সফ্টওয়্যার \ মাইক্রোসফ্ট। ফিউশন এ রেজিস্ট্রি মান সেট করুন 1 পরিবর্তন করুন যে পরিবর্তনগুলি কার্যকর করতে আপনার অ্যাপ্লিকেশনটি পুনরায় চালু করতে হবে (আইস্রেসেট ব্যবহার করুন)।

টিপ: ফিউশন লগিং বন্ধ করার কথা মনে রাখবেন যখন আপনি এটি সম্পন্ন করেন তখন এটি চালু করার জন্য কোনও পারফরম্যান্স পেনাল্টি থাকে।


5

এটি মজার বিষয় আমারও একই রকম সমস্যা ছিল এবং উপযুক্ত কিছু খুঁজে পেলাম না এবং ভাল পুরানো নির্ভরতা ওয়াকার সম্পর্কে সচেতন ছিলাম তাই শেষ পর্যন্ত আমি নিজেই একটি লিখেছিলাম।

এটি NET এর সাথে বিশেষভাবে কাজ করে এবং এটি দেখায় যে কোনও সমাবেশের পুনরাবৃত্তভাবে কী উল্লেখ রয়েছে (এবং অনুপস্থিত)। এটি স্থানীয় গ্রন্থাগার নির্ভরতাও প্রদর্শন করবে show

এটি নিখরচায় (ব্যক্তিগত ব্যবহারের জন্য) এবং আগ্রহী সবার জন্য এখানে উপলভ্য: www.netd depends.com

www.netdepends.com

মতামত স্বাগত।


সমাবেশগুলি খোলার জন্য দয়া করে টানুন এবং ড্রপ সমর্থন যুক্ত করুন। এটি XCOPY স্থাপনার পাশাপাশি উত্স কোড উপলব্ধ থাকলেও এটি দুর্দান্ত।
গিগাপ্লেক্স

আমি কেবল লক্ষ্য করেছি যে যেখানে দুটি সংস্করণ রয়েছে সেখানে বিভাগটির কোনও সুস্পষ্ট লিঙ্ক নেই, এবং ফ্রিটি অ-বাণিজ্যিক ব্যবহারের জন্য। সহায়তা মেনুতে "আপগ্রেড থেকে প্রফেশনাল" বিকল্পটি খুঁজে পেয়ে আমি দুর্ঘটনাক্রমে এতে হোঁচট খেয়েছি। ডাউনলোড পৃষ্ঠায় এমন নোটিশ পাওয়া উচিত যে এটি বাণিজ্যিক ব্যবহারের জন্য বিনামূল্যে নয়।
গিগাপ্লেক্স

@ জিগাপ্লেক্স আমি এই উভয় ধন্যবাদ নোট করব, আমি কি করতে পারি তা দেখতে পাবো।
লয়েড

1
একটি গাছ খোলার জন্য শিফট ক্লিক করুন এবং সমস্ত সাবাইটামগুলি পাশাপাশি কার্যকর হবে।
টিএস

1
নিখোঁজ নির্ভরতাগুলির সম্পর্কে আমাকে কীভাবে জানবেন?
রিয়েলটিবো

2

http://www.amberfish.net/

ChkAsm আপনাকে সংস্করণগুলি সহ একটি নির্দিষ্ট সমাবেশের সমস্ত নির্ভরতা একবারে প্রদর্শন করবে এবং সহজেই আপনাকে তালিকায় সমাবেশগুলি সন্ধান করতে দেবে। আইএলএসপি ( http://ilspy.net/ ) এর চেয়ে এই উদ্দেশ্যে আরও বেশি ভাল কাজ করে যা আমি এই কাজের জন্য ব্যবহার করতাম।


1
2019 পর্যন্ত সেই সাইটটি একরকম স্কেচি চেহারার ব্লগ হিসাবে দেখা যাচ্ছে ...
ম্যাকগুইয়ারভি 10

@ ম্যাকগুইয়ারভি 10 তাই এটি। এটা দুর্ভাগ্যজনক. এবং একটি দ্রুত গুগল সেই অ্যাপ্লিকেশনটির জন্য আর হিট দেয় না।
mhenry1384

0

আমি ব্যবহার করি এমন আরও একটি সহজ প্রতিচ্ছবি অ্যাড-ইন হ'ল নির্ভরতা স্ট্রাকচার ম্যাট্রিক্স । ক্লাসগুলি কী ব্যবহার করে তা দেখতে সত্যিই দুর্দান্ত। আরও এটি নিখরচায়।


সংস্করণ সংখ্যাগুলি দেখায় না, দুর্ভাগ্যক্রমে, কমপক্ষে সংস্করণটি ভিজ্যুয়াল স্টুডিও অ্যাড-ইন হিসাবে ইনস্টল করে না।
mhenry1384

0

বিকল্পটি দিয়ে আপনার .NET সমাবেশ সংকলনের চেষ্টা করুন --staticlink:"Namespace.Assembly"। এটি সংকলনটি সংকলনের সময়ে সমস্ত নির্ভরতা টানতে বাধ্য করে। যদি এটি নির্ভরশীলতার জুড়ে আসে যা রেফারেন্সযুক্ত না হয় তবে এটি সাধারণত সমাবেশের নাম সহ একটি সতর্কতা বা ত্রুটি বার্তা দেয়।

Namespace.Assemblyনির্ভরশীলতার সমস্যা হিসাবে আপনি যে সংসদটিকে সন্দেহ করছেন তা কি? সাধারণত এই স্থিতিশীলভাবে সংবিধানের সাথে সংযুক্তি সমস্ত নির্ভরতাগুলি ট্রান্সজিটিভভাবে উল্লেখ করবে।


-4

আমি দেখতে এবং ব্যবহার করি এমন সেরা অ্যাপ্লিকেশন, মিস / সমস্যাযুক্ত ঘড়িগুলি দেখায়: http ://www.d dependencywalker.com/


2
এই সরঞ্জামটি .NET সমাবেশগুলির সাহায্য করবে না।
কেভিন প্যাঙ্কো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.