Для этого вам необходимо сначала получить ссылки на сборки, а затем получить набор пространств имен из всех типов в этой сборке.
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
, чтобы убедиться, что вы проверяете правильные сборки.