আমি কীভাবে সমস্ত লোড হওয়া অ্যাসেম্বলির তালিকা করব?


102

নেট মধ্যে, আমি সমস্ত অ্যাপডোমেনস জুড়ে সমস্ত লোড হওয়া সমাবেশগুলি গণনা করতে চাই। আমার প্রোগ্রামের অ্যাপডোমেনের জন্য এটি করা যথেষ্ট সহজ AppDomain.CurrentDomain.GetAssemblies()। আমার কি প্রতিটি অ্যাপডোমাইন অ্যাক্সেস করার দরকার আছে? বা ইতিমধ্যে কোনও সরঞ্জাম রয়েছে যা এটি করে?


4
মনে রাখবেন যে GetAssemblies()এটি কাজ করবে না, কারণ এটি পুনরাবৃত্তিযোগ্য নয় এবং এটি কোনও নেস্টেড অ্যাসেমব্লিক রেফারেন্স মিস করবে। আমি স্ট্যাকওভারফ্লো . com/ জিজ্ঞাসাগুলি / ৩৩83৮68/6/২GetAssemblies() এ পুনরাবৃত্ত সংস্করণ যুক্ত করেছি ।
কনটাঙ্গো

@ কনটাঙ্গো: AppDomain.CurrentDomain.GetAssemblies()পুরোপুরি ঠিক আছে। এটি পুনরাবৃত্তভাবে রেফারেন্সগুলি হাঁটার দরকার নেই, কারণ এটি প্রথম স্থানে রেফারেন্সগুলি গণনা করে না।
বেন ভয়েগট

উত্তর:


98

ভিজ্যুয়াল স্টুডিও ব্যবহার করে

  1. প্রক্রিয়াটিতে একটি ডিবাগার সংযুক্ত করুন (উদাহরণস্বরূপ ডিবাগিং শুরু করুন বা ডিবাগ> প্রক্রিয়াতে সংযুক্ত করুন)
  2. ডিবাগ করার সময়, মডিউলগুলি উইন্ডোটি প্রদর্শন করুন (ডিবাগ> উইন্ডোজ> মডিউলগুলি)

এটি প্রতিটি সমাবেশ, অ্যাপ্লিকেশন ডোমেন সম্পর্কে বিশদ দেয় এবং প্রতীকগুলি লোড করার জন্য কয়েকটি বিকল্প রয়েছে (অর্থাত্ পিডিবি ফাইল যা ডিবাগ তথ্য ধারণ করে)।

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

প্রক্রিয়া এক্সপ্লোরার ব্যবহার করে

আপনি যদি কোনও বাহ্যিক সরঞ্জাম চান তবে আপনি প্রক্রিয়া এক্সপ্লোরার (মাইক্রোসফ্ট দ্বারা প্রকাশিত ফ্রিওয়্যার) ব্যবহার করতে পারেন

একটি প্রক্রিয়াতে ক্লিক করুন এবং এটি ব্যবহৃত সমস্ত সমাবেশগুলির সাথে একটি তালিকা প্রদর্শন করবে। সরঞ্জামটি খুব ভাল কারণ এটি অন্যান্য তথ্য যেমন ফাইল হ্যান্ডলগুলি ইত্যাদি দেখায় shows

প্রোগ্রামগতভাবে

এটি কীভাবে করবেন তা ব্যাখ্যা করে এই এই প্রশ্নটি দেখুন ।


4
এটি এখানে ব্যাখ্যা করার চেয়েও আরও ভাল, কারণ কোনও প্রক্রিয়াটির বৈশিষ্ট্য পৃষ্ঠায়, প্রক্রিয়া এক্সপ্লোরার ঠিক কী অ্যাপডোমাইন ('শেয়ার্ড ডোমেন' সহ) অ্যাসেমব্লিতে লোড করা হয় তা দেখায়। সুতরাং এটি .dlls প্রসেসে লোড করা হয় তার চেয়ে বেশি দেখায়। এটি দেখানোর জন্য তারা কী এপিআই ব্যবহার করে তা জেনে রাখা ভাল ('প্রোগ্রাম্যাটিকভাবে' লিঙ্কটি কারেন্টডোমাইন-তে সমাবেশগুলি দেবে)।
Govert

22

এখানেই আমি শেষ করেছি। এটি সমস্ত বৈশিষ্ট্য এবং পদ্ধতির তালিকা এবং আমি প্রতিটি পদ্ধতির সমস্ত পরামিতি তালিকাভুক্ত করেছি। আমি সমস্ত মান পেতে সফল হইনি।

foreach(System.Reflection.AssemblyName an in System.Reflection.Assembly.GetExecutingAssembly().GetReferencedAssemblies()){                      
            System.Reflection.Assembly asm = System.Reflection.Assembly.Load(an.ToString());
            foreach(Type type in asm.GetTypes()){   
                //PROPERTIES
                foreach (System.Reflection.PropertyInfo property in type.GetProperties()){
                    if (property.CanRead){
                        Response.Write("<br>" + an.ToString() + "." + type.ToString() + "." + property.Name);       
                    }
                }
                //METHODS
                var methods = type.GetMethods();
                foreach (System.Reflection.MethodInfo method in methods){               
                    Response.Write("<br><b>" + an.ToString() + "."  + type.ToString() + "." + method.Name  + "</b>");   
                    foreach (System.Reflection.ParameterInfo param in method.GetParameters())
                    {
                        Response.Write("<br><i>Param=" + param.Name.ToString());
                        Response.Write("<br>  Type=" + param.ParameterType.ToString());
                        Response.Write("<br>  Position=" + param.Position.ToString());
                        Response.Write("<br>  Optional=" + param.IsOptional.ToString() + "</i>");
                    }
                }
            }
        }

বিটিডব্লিউ ... আমি এটিকে প্রাথমিক পোস্ট থেকে বাদ দিয়েছি, তবে আমি এরকম কিছু প্রতিক্রিয়া ফিল্টার করেছিforeach(Type type in asm.GetTypes()){ if ((type.ToString().IndexOf("ACLASSIMLOOKINGFOR")>=0) || (type.ToString().IndexOf("BCLASSIMLOOKINGFOR")>=0)){...
s15199d

4
এটি প্রশ্নের কোনও উত্তর দেয় না।
Govert

গেটএক্সেকিউটিংএসাপ্যুলেশন () ব্যবহার না করে, আমি আমার প্রোগ্রাম দ্বারা ব্যবহৃত সমাবেশগুলির আরও ভাল তালিকা পাচ্ছি তা নিশ্চিত করার জন্য আমি getEntryAs आशीर्वाद () ব্যবহার করেছি। যদি এক্সিকিউটিংঅ্যাস্পাবলশনটি কোনও ডিএলএল হতে থাকে তবে আমি তাদের কয়েকটি থেকে বাদ দেব।
হ্যারি গ্লিনোস

6
ব্যবহার করে দেখুন: সমাবেশ [] সমাবেশগুলি = অ্যাপডোমেন.কন্টেনডোমাইন.গেট অ্যাসেমব্লিসি ();
ড্যানডাব্লু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.