考虑我有一个使用以下代码加载的程序集(类库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 t = asm.GetType("NAMESPACE.CLASSNAME",false,true);
如何在上面的行中获取命名空间.?!为了获得命名空间,我需要获取类型..?
Type.Namespace;
即我需要获得可用于获取其类型的程序集的命名空间.
提前致谢
使用Assembly.GetTypes() - 这将获得所有类型的集合,然后您可以获取每个类型的Namespace属性.
然后我猜你可以简单地检查所有类型都有相同的Namespace值并使用这个值.否则添加一些其他逻辑来检测要考虑主要的命名空间.
程序集可以包含多个名称空间.我想你真正想问的是如何在不指定命名空间的情况下从程序集中获取类型.
我不知道是否有更好的方法,但你可以尝试寻找这样的特定类型(添加 - 使用linq;):
myassembly.GetTypes().SingleOrDefault(t => t.Name == "ClassName")
如果在不同的名称空间下有超过1个具有该名称的类(因为Single方法确保只有1),这将有效地抛出.
有关该类的命名空间列表,您可以:
Assembly.Load("ClassName").GetTypes().Select(t => t.Namespace).Distinct();
更新:
IF的assembly name
&assembly namespace
是相同的项目,并确定保留的主题相同和你想要得到的命名空间执行大会电流 ,然后你可以使用这个:
var namespace = Assembly.GetExecutingAssembly().GetName().Name;
对于你加载的程序集:
var namespace = myAssembly.GetName().Name;
但如果您的项目中的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();