0
私はコンソールアプリケーションを持っています。この2つのプロジェクトへの参照をCustomerService.DataAccessとCustomerService.Businessに追加しました。コンソールアプリケーションに追加した2つのプロジェクトにあるすべての名前空間を取得します。感謝します。コンソールアプリケーションで参照されているプロジェクトのすべてのネームスペースを取得する
私はコンソールアプリケーションを持っています。この2つのプロジェクトへの参照をCustomerService.DataAccessとCustomerService.Businessに追加しました。コンソールアプリケーションに追加した2つのプロジェクトにあるすべての名前空間を取得します。感謝します。コンソールアプリケーションで参照されているプロジェクトのすべてのネームスペースを取得する
これを行うには、まず参照アセンブリを取得し、そのアセンブリ内のすべての型から名前空間のセットを取得する必要があります。
AssemblyName[] referencedAssemblies = GetType().Assembly.GetReferencedAssemblies();
HashSet<string > namespaces = new HashSet<string>();
foreach (AssemblyName referencedAssembly in referencedAssemblies)
{
Assembly reference = Assembly.Load(referencedAssembly);
if (!reference.GlobalAssemblyCache)
{
HashSet<string> refernceNamespaces = new HashSet<string>(
reference.GetTypes().Select(t => t.Namespace).Where(ns => ns != null));
namespaces.UnionWith(refernceNamespaces);
}
}
上記のコードは、GACにない参照アセンブリ内のすべての名前空間を取得します。特定のアセンブリ内の名前空間だけを取得したい場合は、AssemblyName.Name
プロパティをチェックして、正しいアセンブリを検査していることを確認してください。
AppDomain.CurrentDomain.GetAssemblies()を通じて実際のAssemblyインスタンスで取得できます。 – zebrabox
最初のコード行でGetType()でExcecutingassemblyを意味しましたか? – user282807
@zebrabox実際には可能ですが、既にロードされているアセンブリで 'Assembly.Load'を呼び出すと、別のアセンブリのコピーがロードされず、すでにロードされているアセンブリが返されます。とにかくアセンブリが参照されるので、追加のオーバーヘッドはありません。 – adrianbanks