我有一个* .xml文件,我已添加到我的解决方案中,并将其构建操作设置为“Resource”。我想将其内容加载到List<string>
。
我发现我可以使用ResourceManager
访问该文件(经过多次尝试后,我认为无法以其他方式访问该文件。)
但是XDocument.Load
需要一个Uri,我不知道它对我的文件是什么,因为它与我在其他问题和MSDN上阅读的内容不兼容。
以下是我的解决方案结构图,与文件有关:
(我需要“ServerList.xml”)
我尝试使用以下Uris:
他们都没有工作 这段代码确实有点:
var rm = new ResourceManager("SQLExecutor.g", Assembly.GetExecutingAssembly());
var rset = rm.GetResourceSet(CultureInfo.InvariantCulture, true, true);
var obj = SerializeToStream rset.GetObject(@"data/serverlist.xml", true);
所以,现在,obj
是一个对象,但我需要一个Uri或一个流传递给XDocument.Load
。我实际上只需要从* .xml中获取信息,并且只使用XDocument,因为我认为这是最好的,但在序列化obj
时遇到问题。
那么,为了能够在XDocument中加载这个“ServerList.xml”文件,我应该做什么呢,所以我可以使用它?
答案 0 :(得分:2)
检查链接https://stackoverflow.com/a/18680852/7974050,是否符合您的目的。
或者,你可以
将文件Build Action设置为 Embedded Resource 。假设,xml文件位于应用程序的根目录中。现在,当您构建解决方案时,它将嵌入到dll中。
You can get this data in
XmlReader reader = XmlReader.Create(new StringReader(GetResourceTextFile("postdata.xml")));
然后在XDocument中加载此阅读器。
public string GetResourceTextFile(string filename)
{
string result = string.Empty;
// In the code below, replace xyz. with the name of your dll + .
// (dot). Idea is to treat file like dllName.filename.xml
using (Stream stream = this.GetType().Assembly.
GetManifestResourceStream("xyz." + filename))
{
using (StreamReader sr = new StreamReader(stream))
{
result = sr.ReadToEnd();
}
}
return result;
}