![](/img/trans.png)
[英]Cannot implicitly convert type object to 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.