Estoy tratando de averiguar cómo portar un código .Net que analizó un archivo xml a WinRT. Hasta ahora, con la ayuda de The given System.Uri cannot be converted into a Windows.Foundation.Uri, tengo el siguiente código. Aún así, se queda bloqueado inmediatamente después creo el Uri:Cómo abrir un archivo empaquetado con WinRT
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);
}
}
me sale una excepción no controlada cuando intento llamar XmlDocument.LoadFromUriAsyn (URI):
ArgumentException era controlada por el código de usuario - Valor hace no caer dentro del rango esperado.
¿Alguien más siente que todo es 10 veces más difícil con WinRT?
EDIT:
He intentado todas las siguientes cadenas, y obtener exactamente el mismo error:
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
proyecto estableció:
Proyecto
- Propiedades
- Referencias
- Activos
- datos
- world.xml código
- Fuente ...
En Código:
filePath = "Data\\world.xml";
También he intentado poner el xml archivo bajo assset \ data, y solo assets. Nada parece hacer la diferencia.
Otra cosa, tengo la acción de compilación del conjunto xml en "Contenido". ¿Es eso correcto? La única otra cosa que podría imaginar que sería "Recurso incrustado", pero lo dudo.
detalles de excepción completos:
System.ArgumentException fue controlada por el código de usuario
HResult = -2147024809
Mensaje = Valor no entra dentro del rango esperado.
Fuente = Windows.Data.Xml.Dom
StackTrace:
en Windows.Data.Xml.Dom.XmlDocument.LoadFromUriAsync (Uri uri, XmlLoadSettings loadSettings)
en Crystal.IO .File.XmlFileSerializer.d__1.MoveNext() en d: \ Projects \ Crystal \ library \ IO \ File \ XmlFileSerializer.CS: línea 32
InnerException:
Descargar el ejemplo más pequeño posible repro el tema: test_xml.zip
¿No debería tener una sola barra al final? Es decir. 'Uri uri = new Uri (" ms-resource: // MyAssembly/"+ filePath);'. –
Tener solo 1 barra inclinada, o una ruta de archivo absoluta (c: \ ...) no tienen ningún efecto diferente. –
¿Puede mostrarnos cómo es 'filePath'? – user7116