.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