.Netには、型名があると、その型が定義されているアセンブリ(System.Reflection.Assemblyのインスタンス)を教えてくれるメソッドがありますか?.NETで指定された型のアセンブリ(System.Reflection.Assembly)を取得する方法は?
私のプロジェクトはすでにそのアセンブリへの参照を持っていると仮定します。
.Netには、型名があると、その型が定義されているアセンブリ(System.Reflection.Assemblyのインスタンス)を教えてくれるメソッドがありますか?.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";
}
これはまた、あなたのタイプがルートに宣言されている前提としています。名前空間に名前空間を入れたり、囲むタイプを指定したり、同じ方法で繰り返したりする必要があります。
Type.GetType(typeNameString).Assembly
これらのメソッドでは、アセンブリ修飾名が必要です。あなたがアセンブリ名で修飾しないと、それはクロスアセンブリで動作するのでしょうか? – chakrit
Assembly.GetAssembly(typeof(System.Int32))
あなたが必要とするために起こるものは何でもタイプでSystem.Int32
を交換してください。それはType
パラメータを受け入れるので、あなたは、例えば、何でもについてちょうどこの方法を行うことができます。
string GetAssemblyLocationOfObject(object o) {
return Assembly.GetAssembly(o.GetType()).Location;
}
私は、CSharpCodeProviderを使ってC#を動的にコンパイルするときに、ReferencedAssembliesリストを作成する方法として、その正確な関数を使用します。 –
これは便利なヒントですが、元のポスターはタイプの名前だけを持ち、タイプのインスタンスはありません。 –
あなたはそれを使用することができた場合は、この構文は、最短/クリーンです:
typeof(int).Assembly
一般的な回答を投稿する前にOPの質問を読んだことがありますか? OPには型と文字列名しかありません。この答えは、その事実を完全に無視しています。 –
@JoshuaHayesあなたは私と同じくらい多くの前提を作っています。私の一般的な答えを書くときには、型名(int)で始まり、その型が定義されているアセンブリを得るための式を書いた。このスレッド全体では一度も、文字列として型名があったとOPは言っていませんでした。 –
彼は実際にやった。メソッドのシグネチャ(string typeName)を見てください。 OPは彼がタイプ名しか持っていないと言いました。したがって、文字列型の名前への参照。 –
私は自分の目的のために受け入れ答え(代わりに、アセンブリ名のアセンブリオブジェクトを返す)を適応し、リファクタリングしました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ソリューションをご希望の場合、私はちょうどここでそれを共有しています。
あなたが探しているものが見つからない場合、おそらくArgumentExceptionがスローされます。おそらくそれは例外的なケースになるでしょうし、あなたがそれを見つけたと思うかもしれません(またはcatch文にエラー処理コードを入れてください) –
しかし、Assembly.GetAssemblyは型のインスタンスを必要とせず、コンパイル時にタイプを知っているものを探しているなら、私の最初の例のようにtypeof(Type)を使うことができます。 –
答えをありがとう、それは私の魅力のように働いています。私は型、ちょうど型名を持っていなかったし、それを含むアセンブリへの参照が利用可能であったことを知っている。 –