如何从嵌入式XML文件中读取 - 一个属于ac#项目的XML文件?我已经在我的项目中添加了一个XML文件,我想从中读取它.我希望XML文件能够与项目一起编译,因为我不希望它成为用户可以看到的资源.
任何的想法?
3Da*_*ave 96
确保XML文件是.csproj项目的一部分.(如果您可以在解决方案资源管理器中看到它,那就很好.)
将XML文件的"Build Action"属性设置为"Embedded Resource".
使用以下代码在运行时检索文件内容:
public string GetResourceTextFile(string filename)
{
string result = string.Empty;
using (Stream stream = this.GetType().Assembly.
GetManifestResourceStream("assembly.folder."+filename))
{
using (StreamReader sr = new StreamReader(stream))
{
result = sr.ReadToEnd();
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)每当您想要阅读文件内容时,只需使用即可
string fileContents = GetResourceTextFile("myXmlDoc.xml");
Run Code Online (Sandbox Code Playgroud)
请注意,"assembly.folder"应替换为包含资源文件的项目名称和文件夹.
更新
实际上,assembly.folder应该替换为默认情况下在与XML文件相同的文件夹中创建的类的命名空间.这通常是defaultNamespace.folder0.folder1.folder2......
sun*_*ide 30
您还可以将XML文件添加为资源,然后使用Resources.YourXMLFilesResourceName(作为字符串,即使用StringReader)来处理其内容.
SLa*_*aks 13
将Build Action设置为Embedded Resource,然后编写以下内容:
using (Stream stream = typeof(MyClass).Assembly.GetManifestResourceStream("MyNameSpace.Something.xml")) {
//Read the stream
}
Run Code Online (Sandbox Code Playgroud)
您可以使用Reflector(从http://www.red-gate.com/products/reflector/免费)查找嵌入式XML文件的路径.
然后,这只是一个问题
Assembly a = typeof(Assembly.Namespace.Class).Assembly;
Stream s = a.GetManifestResourceStream("Assembly.Namespace.Path.To.File.xml");
XmlDocument mappingFile = new XmlDocument();
mappingFile.Load(s);
s.Close();
Run Code Online (Sandbox Code Playgroud)