Как открыть упакованный файл с помощью WinRT

Я пытаюсь понять, как перенести некоторый код .Net, который анализировал файл xml, в WinRT. До сих пор с помощью учитывая, что System.Uri не может быть преобразован в Windows.Foundation.Uri, у меня есть приведенный ниже код. Тем не менее, я застреваю сразу после создания Uri:

    static readonly Uri ResourcesBase = new Uri(@"ms-resource://MyAssembly/"); 
    public override async void Load()
    {
        Uri uri = new Uri(ResourcesBase, filePath); // filePath = "Data//world.xml";
        XmlLoadSettings settings = new XmlLoadSettings() { ValidateOnParse = false };

        XmlDocument xmlDoc = await XmlDocument.LoadFromUriAsync(uri, settings);

        foreach (IXmlNode xmlNode in xmlDoc.ChildNodes)
        {
            ProcessNode(xmlNode);
        }
    }

Я получаю необработанное исключение, когда пытаюсь вызвать XmlDocument.LoadFromUriAsyn(uri):

Код пользователя не обработал ArgumentException — значение не попадает в ожидаемый диапазон.

Кому-нибудь еще кажется, что с WinRT все в 10 раз сложнее?

РЕДАКТИРОВАТЬ:

Я пробовал все следующие строки и получаю ту же ошибку:

  Uri uri = new Uri("ms-resource://MyAssembly//" + filePath);
  Uri uri = new Uri("ms-resource://MyAssembly/" + filePath);
  Uri uri = new Uri("d:\\projects\\crystal\\" + filePath); // A valid absolute path

Настройка проекта:

Проект

  • Характеристики
  • использованная литература
  • Ресурсы
  • Data
    • world.xml
  • Исходный код...

В коде:

  filePath = "Data\\world.xml";

Я также попытался поместить файл xml в каталог asset\data и просто активы. Ничто, кажется, не имеет значения.

Другое дело, что для действия сборки xml установлено значение «Содержимое». Это правильно? Единственное, что я мог себе представить, это «Встроенный ресурс», но я сомневаюсь в этом.

Полная информация об исключении:

System.ArgumentException не было обработано пользовательским кодом

HРезультат=-2147024809

Сообщение=Значение не попадает в ожидаемый диапазон.

Источник = Windows.Data.Xml.Dom

Трассировки стека:

в Windows.Data.Xml.Dom.XmlDocument.LoadFromUriAsync (Uri uri, XmlLoadSettings loadSettings)

в Crystal.IO.File.XmlFileSerializer.d__1.MoveNext() в d:\Projects\Crystal\library\IO\File\XmlFileSerializer.cs:строка 32

Внутреннее исключение:

Загрузите наименьший пример, чтобы воспроизвести проблему: test_xml.zip


person Nick Banks    schedule 04.03.2012    source источник
comment
Разве у вас не должна быть только одна косая черта? т.е. Uri uri = new Uri("ms-resource://MyAssembly/" + filePath);.   -  person Damir Arh    schedule 04.03.2012
comment
Наличие только 1 завершающей косой черты или абсолютного пути к файлу (c:\...) не имеет никакого другого эффекта.   -  person Nick Banks    schedule 04.03.2012
comment
Можете ли вы показать нам, как выглядит filePath?   -  person user7116    schedule 05.03.2012
comment
Обновлено, чтобы показать настройку проекта и переменную filePath.   -  person Nick Banks    schedule 05.03.2012


Ответы (1)