簡體   English   中英

如何獲取.Net中給定類型的程序集(System.Reflection.Assembly)?

[英]How to get the assembly (System.Reflection.Assembly) for a given type in .Net?

在 .Net 中,給定類型名稱,是否有一種方法可以告訴我在哪個程序集(System.Reflection.Assembly 的實例)中定義了該類型?

我假設我的項目已經引用了該程序集,只需要知道它是哪一個。

Assembly.GetAssembly 假定您具有該類型的實例,而 Type.GetType 假定您具有包含程序集名稱的完全限定類型名稱。

如果您只有基本類型名稱,則需要執行以下操作:

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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM