Синтаксический анализ локального XML-документа в WPF (работает в режиме отладки, завершается неудачно после публикации) - PullRequest
1 голос
/ 02 ноября 2008

Я создаю приложение WPF. Внутри этого приложения я использую класс XmlReader для анализа нескольких локальных файлов XML. Код, который я написал , отлично работает во время отладки, но не работает, когда я публикую приложение и устанавливаю его.

У меня есть XML-документы как CONTENT в действии сборки, и мне всегда задано значение COPY ВСЕГДА. Я могу подтвердить, что 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>

Ответы [ 3 ]

3 голосов
/ 03 ноября 2008

По вашему опубликованному описанию я предполагаю, что вы используете clickonce для установки приложения.

Clickonce имеет другое поведение по умолчанию для файлов XML - он предполагает, что они являются файлами данных, и размещает их в месте установки, отличном от других файлов.

Пожалуйста, проверьте, что ваши xml-файлы действительно устанавливаются там, где вы думаете.

В настройках публикации вы можете изменить настройку для каждого файла XML из файла данных, чтобы включить. Ваши другие файлы уже будут включены.

Обратите внимание, что параметры публикации не зависят от параметров сборки файла.

1 голос
/ 02 ноября 2008

Можете ли вы описать «но не получается, когда я публикую приложение и устанавливаю его»?

Было бы полезно, если бы вы могли описать, что не работает, в чем заключается ошибка, и предоставить информацию об исключении.


Не имея отношения к вашему вопросу, я ужасаюсь каждый раз, когда вижу в блоке кода пустые блоки catch !!

0 голосов
/ 03 ноября 2008

Рассмотрите возможность использования IsolatedStorage для хранения ваших настроек, а не в относительной директории ресурсов. Это даст вам известное местоположение для различных сценариев установки (например, установки ClickOnce).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...