Lis*_*isa 58
当我想通过其清单资源流从当前程序集加载资源时,我经常遇到这种困境.
事实是,如果使用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);
Run Code Online (Sandbox Code Playgroud)
另请参见:如何获取程序集的命名空间?
编辑:还注意到我在http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/3a469f5d-8f55-4b25-ac25-4778f260bb7e回答的问题的非常详细的答案
另一个编辑,以防有相同问题的人来看:这里解决资源加载问题的好主意:如何获得项目csproj的默认命名空间(VS 2008)
Dar*_*opp 38
不可能.Nothing指定"Root"命名空间.选项中的默认命名空间是视觉工作室的东西,而不是.net的东西
小智 7
我刚刚创建了一个名为 Root 的空内部类并将其放在项目根目录中(假设这是您的根命名空间)。然后我在需要根命名空间的任何地方使用它:
typeof(Root).Namespace;
Run Code Online (Sandbox Code Playgroud)
当然我最终得到一个未使用的文件,但它很干净。
程序集不一定具有根命名空间.命名空间和程序集是正交的.
你可能正在寻找的是在该程序集中找到一个类型,然后找出它的名称空间是什么.
您应该能够通过使用GetExportedTypes()成员,然后使用其中一个返回的Type句柄中的Namespace属性来完成此操作.
但是,不能保证所有类型都在同一名称空间中(甚至在相同的名称空间层次结构中).