এখানে কি কিছু আছে:
AppDomain.CurrentDomain.GetAssemblyByName("TheAssemblyName")
সুতরাং লুপিংয়ের পরিবর্তে AppDomain.CurrentDomain.GetAssemblies()
আমরা কেবলমাত্র নির্দিষ্ট সমাবেশটি সরাসরি পেতে পারি।
উত্তর:
আমি লিনকিউ দিয়ে সমাধান করেছি
Assembly GetAssemblyByName(string name)
{
return AppDomain.CurrentDomain.GetAssemblies().
SingleOrDefault(assembly => assembly.GetName().Name == name);
}
এটি আপনি কী অর্জন করার চেষ্টা করছেন তার উপর নির্ভর করে।
আপনি যদি কেবল সমাবেশ পেতে চান তবে আপনার কল করা উচিত System.Reflection.Assembly.Load()
(ইতিমধ্যে চিহ্নিত হিসাবে) এর কারণেই .NET অ্যাসেম্বলিটি ইতিমধ্যে বর্তমান অ্যাপডোমাইনে লোড হয়েছে কিনা তা স্বয়ংক্রিয়ভাবে পরীক্ষা করে।
যদি আপনি কেবল সমাবেশটি লোড হয়েছে কিনা তা পরীক্ষা করে দেখার চেষ্টা করছেন (কিছু ডায়াগনস্টিক কারণে, সম্ভবত) তবে আপনাকে সমস্ত ভারী অ্যাসেম্বলিতে লুপ করতে হবে।
আপনি লুপ করতে চাইতে পারেন এমন আরও একটি কারণ হ'ল যদি আপনি কেবল সমাবেশ সংক্রান্ত কিছু তথ্য জানেন (যেমন, আপনি সংস্করণ সম্পর্কে নিশ্চিত নন)। এটি, "আপনি যখন দেখবেন তখন এটি সনাক্ত করতে" আপনি যথেষ্ট জানেন তবে এটি লোড করার পক্ষে পর্যাপ্ত নয়। যদিও এটি মোটামুটি অস্পষ্ট এবং অসম্ভব দৃশ্য।
যাদের কেবল সমাবেশের মেটাডেটা (সংস্করণ ইত্যাদি) অ্যাক্সেস করতে হবে তাদের জন্য অ্যাসেম্বলি পরীক্ষা করে দেখুন R কেবলমাত্র মেটাডেটা লোড করতে সক্ষম হ'ল কেবলমাত্র মেটাডেটা লোড করতে সক্ষম, কেবল স্মৃতি এবং আইও সংরক্ষণ করে।
এটি যদি আপনার উল্লেখ করা কোনও সমাবেশ হয় তবে আমি নীচের মতো একটি ক্লাস লিখতে চাই:
namespace MyLibrary {
public static class MyLibraryAssembly {
public static readonly Assembly Value = typeof(MyLibraryAssembly).Assembly;
}
}
এবং তারপরে যখনই আপনার এই সমাবেশটির একটি রেফারেন্স দরকার:
var assembly = MyLibraryAssembly.Value;
options.RegisterFromAssembly(Application.AssemblyReference.Value)
আপনি একটি এক্সটেনশন পদ্ধতি লিখতে পারেন যা আপনার প্রয়োজন অনুযায়ী করে।
এই পদ্ধতিটি কেবল লোড হওয়া সমাবেশগুলি গণনা করবে , যদি আপনার সম্ভবত এটি লোড করা প্রয়োজন হয়, Assembly.Load
গৃহীত উত্তর থেকে ব্যবহার করুন ।
public static class AppDomainExtensions
{
public static Assembly GetAssemblyByName(this AppDomain domain, string assemblyName)
{
return domain.GetAssemblies().FirstOrDefault(a => a.GetName().Name == assemblyName);
}
}
তারপরে আপনি এই পদ্ধতিটিকে এইভাবে একটি অ্যাপডোমেনে কল করুন:
Assembly a = AppDomain.CurrentDomain.GetAssemblyByName("SomeAssembly")
তাহলে SomeAssembly বর্তমান AppDomain মধ্যে লোড হয় পদ্ধতি এটা ফিরে আসবে, অন্যথায় এটি ফিরে আসবে null
।
সিস্টেমটি দেখুন efনির্ধারণ.অসাধারণ শ্রেণি, বিশেষত লোড পদ্ধতি: এমএসডিএন
System.IO.FileNotFoundException
যদি সমাবেশটি লোড করা না যায় তবে এটি ছুড়ে ফেলে ।