当前位置:  开发笔记 > Android > 正文

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

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

给出一个例子System.Reflection.Assembly.



1> Lisa..:

当我想通过其清单资源流从当前程序集加载资源时,我经常遇到这种困境.

事实是,如果使用Visual Studio将文件作为资源嵌入到程序集中,则其清单资源名称将从Visual Studio项目中定义的程序集的默认名称空间派生.

我提出的最佳解决方案(为了避免将默认命名空间硬编码为某个字符串)是为了简单地确保您的资源加载代码始终从也在默认命名空间中的类内部发生,然后是以下近似通用方法可能用过了.

此示例正在加载嵌入式架构.

XmlSchema mySchema;
string resourceName = "MyEmbeddedSchema.xsd";
string resourcesFolderName = "Serialisation";
string manifestResourceName = string.Format("{0}.{1}.{2}",
    this.GetType().Namespace, resourcesFolderName, resourceName);
using (Stream schemaStream = currentAssembly.GetManifestResourceStream(manifestResourceName))
    mySchema = XmlSchema.Read(schemaStream, errorHandler);

另请参见:如何获取程序集的命名空间?

编辑:还注意到我在http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/3a469f5d-8f55-4b25-ac25-4778f260bb7e回答的问题的非常详细的答案

另一个编辑,以防有相同问题的人来看:这里解决资源加载问题的好主意:如何获得项目csproj的默认命名空间(VS 2008)


当程序集名称与我的项目的"根命名空间"不匹配时,嵌入式资源解析存在问题.感谢有用的帖子

2> Darren Kopp..:

不可能.Nothing指定"Root"命名空间.选项中的默认命名空间是视觉工作室的东西,而不是.net的东西


@Roboblob Darren的答案在技术上是正确的.对于想要在VS中构建项目的上下文中知道这种情况的95%左右的情况,Mine只是有用.
用户Lisa下面的帖子确实有用,所以这个答案被标记为答案,但没有正当理由.

3> Jason Diller..:

在给定的程序集中可以有任意数量的命名空间,并且不需要它们都从公共根开始.您可以做的最好的事情是反映程序集中的所有类型,并构建其中包含的唯一命名空间列表.



4> therealhoff..:

程序集不一定具有根命名空间.命名空间和程序集是正交的.

你可能正在寻找的是在该程序集中找到一个类型,然后找出它的名称空间是什么.

您应该能够通过使用GetExportedTypes()成员,然后使用其中一个返回的Type句柄中的Namespace属性来完成此操作.

但是,不能保证所有类型都在同一名称空间中(甚至在相同的名称空间层次结构中).

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有