如何从嵌入式XML文件中读取 - 作为c#项目一部分的XML文件? 我已经在我的项目中添加了一个XML文件,我想从中读取它。我希望XML文件能够与项目一起编译,因为我不希望它成为用户可以看到的资源。
有什么想法吗?
答案 0 :(得分:93)
确保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;
}
每当您想要阅读文件内容时,只需使用
即可string fileContents = GetResourceTextFile("myXmlDoc.xml");
请注意,“assembly.folder”应替换为包含资源文件的项目名称和文件夹。
<强>更新强>
实际上,assembly.folder
应该替换为名称空间,默认情况下,在与XML文件相同的文件夹中创建的类。通常为defaultNamespace.folder0.folder1.folder2.....
。
答案 1 :(得分:29)
您还可以将XML文件添加为资源,然后使用Resources.YourXMLFilesResourceName
(作为字符串,即使用StringReader)来处理其内容。
答案 2 :(得分:13)
将Build Action设置为Embedded Resource,然后编写以下内容:
using (Stream stream = typeof(MyClass).Assembly.GetManifestResourceStream("MyNameSpace.Something.xml")) {
//Read the stream
}
答案 3 :(得分:8)
您可以使用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();
答案 4 :(得分:2)
以这种方式访问:
GetType().Module.Assembly.GetManifestResourceStream("namespace.folder.file.ext")
请注意,资源名称字符串是文件的名称, 包括扩展,前面是项目的默认命名空间。 如果资源位于文件夹中,则还必须将其包含在文件夹中 字符串。
(来自http://www.dotnet247.com/247reference/msgs/1/5704.aspx,但我经常使用它)
答案 5 :(得分:1)
@ 3Dave确实提供了帮助(已投了赞成票),但是我的资源帮手在另一个大会中,所以我做了以下事情
startForeground
致电
public string GetResourceFileText(string filename, string assemblyName)
{
string result = string.Empty;
using (Stream stream =
System.Reflection.Assembly.Load(assemblyName).GetManifestResourceStream($"{assemblyName}.{filename}"))
{
using (StreamReader sr = new StreamReader(stream))
{
result = sr.ReadToEnd();
}
}
return result;
}