当我想通过其清单资源流从当前程序集加载资源时,我多次遇到这种困境。
事实上,如果使用 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);
也可以看看:如何获取程序集的命名空间? https://stackoverflow.com/questions/653128/how-to-get-namespace-of-an-assembly
编辑:还注意到我正在回答的问题的非常详细的答案http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/3a469f5d-8f55-4b25-ac25-4778f260bb7e http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/3a469f5d-8f55-4b25-ac25-4778f260bb7e
另一个编辑,以防有相同问题的人来寻找:在这里解决资源加载问题的好主意:如何获取项目csproj的默认命名空间(VS 2008) https://stackoverflow.com/questions/4885888/how-get-the-default-namespace-of-project-csproj-vs-2008