首页 / 知识
关于.net:如何获取程序集的根名称空间?
2023-04-17 08:59:00

How do you get the root namespace of an assembly?
给定 当我想通过清单资源清单的资源流从当前程序集中加载资源时,我已经遇到过很多难题。 事实是,如果使用Visual Studio将文件作为资源嵌入到程序集中,其清单资源名称将来自Visual Studio项目中定义的程序集的默认名称空间。 我想出的最好的解决方案(避免将默认名称空间硬编码为某个字符串)只是确保始终在默认名称空间中的类内部发生资源加载代码,然后采用以下通用方法可能用过了。 本示例正在加载嵌入式模式。
另请参阅:如何获取程序集的命名空间? 编辑:还注意到我在http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/3a469f5d-8f55-4b25-ac25-4778f260bb7e回答的问题的非常详细的答案 如果有人遇到相同的问题,请进行另一种编辑:解决此处资源加载问题的好主意:如何获取项目csproj的默认名称空间(VS 2008) 不可能。什么都没有指定"根"命名空间。选项中的默认名称空间是Visual Studio内容,而不是.net内容。 给定程序集中可以有任意数量的命名空间,并且不需要它们全部从一个公共根开始。最好的办法是反映程序集中的所有类型,并建立其中包含的唯一名称空间的列表。 程序集不一定具有根名称空间。命名空间和程序集是正交的。 您可能正在寻找的是在该Assembly中找到一个类型,然后找出其命名空间是什么。 您应该能够通过使用GetExportedTypes()成员,然后使用返回的Type句柄之一中的Namespace属性来完成此操作。 同样,不能保证所有类型都在相同的名称空间(甚至在相同的名称空间层次结构中)。 我刚刚创建了一个名为Root的空内部类,并将其放在项目根目录中(假设这是您的根名称空间)。然后在需要根名称空间的地方使用它:
当然,我最终得到的是未使用的文件,但是很干净。
获取类型为您提供了在程序集中定义的Type对象的列表。该对象具有名称空间属性。请记住,程序集可以具有多个名称空间。 这是获取网站项目的根名称空间的一种非常简单的方法。
这只是检查所有已加载的程序集是否为" MyProject"类型,并返回该类型的根名称空间。当您在一个共享日志系统的解决方案中有多个Web项目时,这对于日志记录很有用。希望这对某人有帮助。 希望在这里添加所有其他答案,而无需重复信息,这是我使用Linq解决的方法。我的情况类似于丽莎的答案。 我的解决方案带有以下警告:
我当时想到的问题是:"如果我将库代码调用N个方法更深,并想要该项目的名称空间-例如实际运行的MVC应用程序-我该如何获得它?" 有点骇人听闻,但您可以抓取stacktrace和进行过滤:
所有要做的就是获取stacktrace,从最近调用的方法到根方法运行,并对System进行过滤。找到系统调用后,便知道它已经走得太远了,并向您返回紧接其上方的名称空间。无论您是运行单元测试,MVC App还是服务,系统容器都将比项目的根名称空间深一层。 在某些情况下,系统代码是跟踪的中介(例如System.Task),这将返回错误的答案。我的目标是例如使用一些启动代码,并让它轻松地在根命名空间中查找类或Controller或其他内容,即使执行工作的代码位于库中也是如此。这样就完成了这项任务。 我确信可以改进-我确信可以通过多种方式改进这种怪异的处事方式,并且欢迎进行改进。
我在WPF应用程序中使用 通过枚举程序集清单资源的名称,实际上有一种间接的方式来获取它。您想要的名称以您知道的部分结尾。 而不是在此处重复代码,请参阅获取Assembly.GetManifestResourceStream()方法的默认名称空间名称 命名空间与程序集无关-命名空间与程序集中的类之间的任何映射纯粹是由于命名约定(或巧合)。 |
最新内容
相关内容
更新文件命令linux?
更新文件命令linux?,工作,系统,地址,信息,时间,命令,目录,基础,标准,网络,linux常用命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出目linux基础命令增加文件?
linux基础命令增加文件?,系统,时间,名字,文件,基础,数据,命令,名称,首次,密码,linux命令如何新建一个文件终端下键入:touch加文件名,这样就创建linux下读取文件命令?
linux下读取文件命令?,系统,工作,地址,数字,图片,信息,网络,命令,文件,一致,linux文件系统常用命令1、其中一些常用的命令包括ls、cd、pwd和mklinux改文件夹名命令?
linux改文件夹名命令?,名字,软件,命令,文件,系统,目录,目标,文件名,源文件,选项,linux中用什么命令移修改文件夹名1、linux下使用mv命令来移动linux建文件命令格式?
linux建文件命令格式?,系统,名字,名称,时间,密码,命令,文件,文件夹,不了,数据,Linux虚拟机命令如何创建新的文件和文件夹1、首先,连接相应linux下载文件的命令linux?
下载文件的命令linux?,平台,工具,服务,密码,软件,网络,位置,代理,手机,工作,从linux服务器中下载或上传文件1、您要问的是为什么linux服务器一linux命令文件传输?
linux命令文件传输?,系统,数据,命令,文件,基本知识,源文件,目录,目标,功能,语法,...安装rz和sz命令实现Linux与Windows传输文件1、使用rz和szlinux文件全选命令?
linux文件全选命令?,电脑,系统,环境,代码,平台,服务,快捷键,文件,命令,权限,linux不小心文件全选点了打开,怎么全部取消打开文件你如果没有修linux浏览文件类命令?
linux浏览文件类命令?,系统,信息,数据,情况,命令,标准,时间,文件,概念,管理,在Linux系统中,执行什么命令查看文件或目录的权限?1、linux查看文linux打包文件夹命令?
linux打包文件夹命令?,系统,工具,管理,图片,文件,命令,位置,软件,目录,格式,linux压缩解压gz文件命令命令格式:tar -zxvf 压缩文件名.tar.gz。linux中统计文件命令?
linux中统计文件命令?,系统,信息,数据,情况,工作,文件,时间,档案,标准,名称,Linux系统中查看所有文件的命令是什么?linux系统下用ls命令列出当linux重名名文件命令?
linux重名名文件命令?,图片,名称,名字,文件,命令,位置,代码,软件,系统,文件名,linux文件重命名命令mv较简单的处理命令:mvmv原文件名新文件名如