我正在构建一个WPF应用程序。在该应用程序内部,我使用XmlReader类来解析几个本地XML文件。我编写的代码在调试期间完美地运行,但是一旦我发布应用程序并安装它就失败了。
我在构建操作中将XML文档作为CONTENT,并且我将它们设置为COPY ALWAYS。我可以确认XML文档正在我的构建中部署,并且一旦安装就在应用程序文件夹中。
让我感到困惑的是,我使用相同的XmlReader代码来解析此应用程序中外部网站的RSS源没有问题。它只在本地XML文档上失败。
有人知道为什么我的XmlReader在发布应用程序后无法解析本地XML文档吗?
以下是我的XmlReader代码的小片段:
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;
settings.IgnoreProcessingInstructions = true;
settings.IgnoreWhitespace = true;
try
{
settingsReader = XmlReader.Create("Resources/data/TriviaQuestions.xml", settings);
nodeNum = 0;
while (settingsReader.Read())
{
switch (settingsReader.NodeType)
{
case XmlNodeType.Element:
if (settingsReader.HasAttributes)
{
for (int i = 0; i < settingsReader.AttributeCount; i++)
{
settingsReader.MoveToAttribute(i);
_feeds[nodeNum] = settingsReader.Value.ToString();
}
settingsReader.MoveToContent(); // Moves the reader back to the element node.
}
break;
case XmlNodeType.Text:
_questions[nodeNum] = settingsReader.Value;
nodeNum++;
break;
}
}
settingsReader.Close();
}
catch
{
}
这是我的XML
<?xml version="1.0" encoding="utf-8" ?>
<Questions>
<Question feed="http://entertainment.msn.com/rss/topboxoffice/">What movie has the top box office sales in the US right now?</Question>
<Question feed="http://entertainment.msn.com/rss/topdvdrentals/">What is the top DVD rental in the US this week?</Question>
<Question feed="http://entertainment.msn.com/rss/topalbums/">Which of the following albums is currently topping the charts?</Question>
</Questions>
答案 0 :(得分:3)
根据您的发布说明,我假设您使用clickonce来安装应用程序。
Clickonce对xml文件有不同的默认行为 - 它假定它们是数据文件,并将它们放在与其他文件不同的安装位置。
请仔细检查您的xml文件是否确实安装在您认为的位置。
在发布设置中,您可以将每个xml文件的设置从数据文件更改为包含。您的其他文件已经设置为包含。
请注意,发布设置与文件的构建设置无关。
答案 1 :(得分:1)
你能描述一下“但是一旦我发布应用程序并安装它就失败了吗?”
如果您可以描述不起作用的内容,错误是什么以及提供异常信息,那将会很有帮助。
与你的问题无关,每当我在生产代码中看到空的catch块时,我都会惊恐万分!
答案 2 :(得分:0)
考虑使用IsolatedStorage存储您的设置,而不是存储在相对的Resources目录中。这将为您提供不同安装方案的已知位置(例如,ClickOnce安装)。