Я пытаюсь выяснить, как перенести некоторый код .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 раз сложнее?
EDIT:
Я перепробовал все следующие строки и получил точно такую же ошибку:
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
Настройка проекта:
Проект
- Свойства
- Ссылки
- Активы
- Данные
- Исходный код ...
В коде:
filePath = "Data\\world.xml";
Я также пытался поместить xml-файл в группу assset \ data и просто активировать. Ничто, кажется, не имеет значения.
Другое дело, у меня для параметра «Действие сборки» для xml установлено «Содержимое». Это верно? Единственное, что я мог себе представить, это «Встроенный ресурс», но я сомневаюсь в этом.
Полная информация об исключении:
System.ArgumentException не был обработан кодом пользователя
HResult = -2147024809
Сообщение = значение не попадает в ожидаемый диапазон.
Источник = Windows.Data.Xml.Dom
StackTrace:
в 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
InnerException:
Загрузите наименьший возможный пример, чтобы повторить проблему: test_xml.zip