كيفية الحصول على التجمع (system.reflection.assembly) لنوع معين في .NET؟

StackOverflow https://stackoverflow.com/questions/1141121

سؤال

في .NET، نظرا لاسم النوع، هل هناك طريقة تخبرني فيها التجميع (مثيل النظام .Reflection.Assembly) تم تعريف هذا النوع؟

أفترض أن مشروعي لديه بالفعل إشارة إلى تلك الجمعية، فقط بحاجة إلى معرفة أي واحد هو.

هل كانت مفيدة؟

المحلول

تجميعها. يفترض GetticeSemby أن لديك مثيل للنوع، ويتم اكتبه. تتحمل أن يكون لديك اسم نوع مؤهل بالكامل يتضمن اسم التجميع.

إذا كان لديك سوى اسم نوع الأساس، فأنت بحاجة إلى القيام بشيء ما مثل هذا:

public static String GetAssemblyNameContainingType(String typeName) 
{
    foreach (Assembly currentassembly in AppDomain.CurrentDomain.GetAssemblies()) 
    {
        Type t = currentassembly.GetType(typeName, false, true);
        if (t != null) {return currentassembly.FullName;}
    }

    return "not found";
}

هذا يفترض أيضا أنه يتم الإعلان عن نوعك في الجذر. ستحتاج إلى توفير مساحة الاسم أو أرفق الأنواع بالاسم، أو تكرر بنفس الطريقة.

نصائح أخرى

Assembly.GetAssembly(typeof(System.Int32))

يستبدل System.Int32 مع أي نوع ما يحدث لتحتاج إليه. لأنه يقبل Type المعلمة، يمكنك القيام بأي شيء بهذه الطريقة فقط، على سبيل المثال:

string GetAssemblyLocationOfObject(object o) {
    return Assembly.GetAssembly(o.GetType()).Location;
}

لقد قمت بتكييف الإجابة المقبولة لأغراضي الخاصة (إرجاع كائن التجميع بدلا من اسم التجميع)، وقم بإعادة تعيين رمز VB.NET و LINQ:

Public Function GetAssemblyForType(typeName As String) As Assembly
    Return AppDomain.CurrentDomain.GetAssemblies.FirstOrDefault(Function(a) a.GetType(typeName, False, True) IsNot Nothing)
End Function

أنا فقط تقاسمها هنا إذا كان أي شخص آخر يرغب في حل LinQy للإجابة المقبولة.

Type.GetType(typeNameString).Assembly

إذا كنت تستطيع استخدامه، فإن هذا بناء الجملة هو أقصر / أنظف:

typeof(int).Assembly
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top