当前位置:  开发笔记 > 编程语言 > 正文

如何获得程序集的命名空间?

如何解决《如何获得程序集的命名空间?》经验,为你挑选了3个好方法。

考虑我有一个使用以下代码加载的程序集(类库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;

即我需要获得可用于获取其类型的程序集的命名空间.

提前致谢



1> sharptooth..:

使用Assembly.GetTypes() - 这将获得所有类型的集合,然后您可以获取每个类型的Namespace属性.

然后我猜你可以简单地检查所有类型都有相同的Namespace值并使用这个值.否则添加一些其他逻辑来检测要考虑主要的命名空间.



2> eglasius..:

程序集可以包含多个名称空间.我想你真正想问的是如何在不指定命名空间的情况下从程序集中获取类型.

我不知道是否有更好的方法,但你可以尝试寻找这样的特定类型(添加 - 使用linq;):

myassembly.GetTypes().SingleOrDefault(t => t.Name == "ClassName")

如果在不同的名称空间下有超过1个具有该名称的类(因为Single方法确保只有1),这将有效地抛出.

有关该类的命名空间列表,您可以:

Assembly.Load("ClassName").GetTypes().Select(t => t.Namespace).Distinct();



3> RAM..:

更新:

IFassembly 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();


@ErikE,谢谢你的暗示.我知道问题已得到解答,我的回答是这种情况的第二种方式:默认情况下它们是相同的,在某些情况下开发人员保持相同,所以在这种情况下我的答案是正确的.我用额外的IF更新了我的答案.
推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有