.NETで指定された型のためのアセンブリ(System.Reflection.Assembly)を取得する方法?
-
16-09-2019 - |
質問
.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
所属していません StackOverflow