私は次のコードを使用してロードしたアセンブリ(クラスライブラリdll)を持っていると考えてください、
Assembly a = Assembly.LoadFrom(@"C:\Documents and Settings\E454935\My Documents\Visual Studio 2005\Projects\nunit_dll_hutt\for_hutt_proj\bin\Debug\asdf.dll");
そして、私はアセンブリのタイプを取得する必要があります。 typeを取得するには、アセンブリの名前空間が必要です。
Type t = asm.GetType("NAMESPACE.CLASSNAME",false,true);
上記の行で名前空間を取得するにはどうすればよいですか?! Namespaceを取得するために、型を取得する必要があります。
Type.Namespace;
つまり、タイプを取得するために使用できるアセンブリの名前空間を取得する必要があります。
前もって感謝します
Assembly.GetTypes()を使用します。これにより、すべての型のコレクションが取得され、各型の名前空間プロパティを取得できます。
次に、すべての型が同じ名前空間値を持っていることを確認し、この値を使用できると思います。そうでない場合は、他のロジックを追加して、プライマリと見なす名前空間を検出します。
アセンブリには、複数の名前空間を含めることができます。名前空間を指定せずに、アセンブリから型を取得する方法が本当に欲しいと思います。
より良い方法があるかどうかはわかりませんが、次のような特定のタイプを探してみてください(add-using linq;):
myassembly.GetTypes().SingleOrDefault(t => t.Name == "ClassName")
これは、異なる名前空間にその名前のクラスが複数ある場合に効果的にスローされます(Singleメソッドは1つだけであることを保証するため)。
そのクラスの名前空間のリストについては、次のことができます。
Assembly.Load("ClassName").GetTypes().Select(t => t.Namespace).Distinct();
更新済み:
[〜#〜] if [〜#〜] the Assembly name
&Assembly namespace
はプロジェクト内で同じであり、テーマは必ず同じにします[〜#〜] and [〜#〜]の名前空間を取得したい現在実行されているアセンブリthenこれを使用できます:
var namespace = Assembly.GetExecutingAssembly().GetName().Name;
そして、ロードされたアセンブリの場合:
var namespace = myAssembly.GetName().Name;
しかし[〜#〜] if [〜#〜] the Assembly name
&Assembly namespace
ではないプロジェクトで同じ場合、この方法を使用できます。
// Like @eglasius answer >>
// Find all namespaces in the target Assembly where a class with the following name is exists:
var namespaceList=Assembly.Load("MyClassName").GetTypes().Select(t => t.Namespace).Distinct();
Mono/Xamarinを使用すると、「NameSpace」プロパティにアクセスできません。代わりに次を使用できます。
var str = typeof(ATypeInTheAssembly).AssemblyQualifiedName;
return str.Split(',')[1].Trim();
Assembly.GetName().Name
はデフォルトの名前空間を取得します
だから、ここに私が見つけた解決策があります:
public string GetAssemblyNamespace(Assembly asm)
{
string ns = @"";
foreach (Type tp in asm.Modules.First().GetTypes()) //Iterate all types within the specified Assembly.
if (ns.Length == 0 ? true : tp.Namespace.Length < ns.Length) //Check whether that's the shortest so far.
ns = tp.Namespace; //If it's, set it to the variable.
return ns; //Now it is the namespace of the Assembly.
}
必要なアセンブリ内のすべてのタイプを見つけ、最も短い名前を持つネームスペースに含まれるタイプを検索します。
名前空間のみを取得するには、次のコードに従います。
var Assembly = System.Reflection.Assembly.GetAssembly(this.GetType());//Get the Assembly object
var nameSpace = Assembly.GetType().Namespace;//Get the namespace
[〜#〜] or [〜#〜]
public string GetNamespace(object obj)
{
var nameSpace = obj.GetType().Namespace;//Get the namespace
return nameSpace;
}