Nella mia app universale per Windows sto memorizzando i dati utente trasformando i suoi oggetti in file xml tramite XmlSerializer.UWP con xmlSerializer - System.InvalidOperationException: impossibile generare una classe temporanea (risultato = 1) errore di compilazione
L'applicazione stava compilando, costruzione e funziona perfettamente fino in qualche modo (senza alcuna modifica sul codice) la build per il rilascio iniziato a darmi questo errore: System.InvalidOperationException: Impossibile generare una classe temporanea (risultato = 1).
Se creo o eseguo l'app su debug, funziona in modo impeccabile ma al momento del rilascio (con la catena di strumenti nativi .NET attiva) ottengo l'errore.
Ho già dato il permesso alla cartella C: \ Windows \ Temp a tutti. Anche mia madre ha accesso ad esso, ma l'errore rimane.
Se si tratta di un problema di lettura/scrittura su XmlSerializer, mi chiedo se è possibile modificare la cartella temporanea serializzatore nel progetto UWP.
Ecco il codice che ho usato per serializzare gli oggetti:
public static async Task<T> ReadObjectFromXmlFileAsync<T>(string filename)
{
// this reads XML content from a file ("filename") and returns an object from the XML
T objectFromXml = default(T);
var serializer = new XmlSerializer(typeof(T));
StorageFolder folder = ApplicationData.Current.LocalFolder;
StorageFile file = await folder.GetFileAsync(filename).AsTask().ConfigureAwait(false);
Stream stream = await file.OpenStreamForReadAsync().ConfigureAwait(false);
objectFromXml = (T)serializer.Deserialize(stream);
stream.Dispose();
return objectFromXml;
}
public static async Task SaveObjectToXml<T>(T objectToSave, string filename)
{
// stores an object in XML format in file called 'filename'
var serializer = new XmlSerializer(typeof(T));
StorageFolder folder = ApplicationData.Current.LocalFolder;
StorageFile file = await folder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting).AsTask().ConfigureAwait(false);
Stream stream = await file.OpenStreamForWriteAsync().ConfigureAwait(false);
using (stream)
{
serializer.Serialize(stream, objectToSave);
}
}
//This uses a subfolder
public static async Task<T> ReadObjectFromXmlFileAsync<T>(string filename)
{
// this reads XML content from a file ("filename") and returns an object from the XML
T objectFromXml = default(T);
var serializer = new XmlSerializer(typeof(T));
StorageFolder folder = ApplicationData.Current.LocalFolder;
StorageFolder subFolder = await folder.GetFolderAsync("Notes").AsTask().ConfigureAwait(false);
StorageFile file = await subFolder.GetFileAsync(filename).AsTask().ConfigureAwait(false);
Stream stream = await file.OpenStreamForReadAsync().ConfigureAwait(false);
objectFromXml = (T)serializer.Deserialize(stream);
stream.Dispose();
return objectFromXml;
}
Che cosa mi manca? Qualcuno può aiutare?
Se si attiva la registrazione del livello di diagnostica, potrebbero esserci altri indizi.Se questo non è delucidante, non esitate a inviarci una mail a [email protected] Non che la gente non sarà in ufficio fino a martedì a causa delle vacanze del giorno MLK. –
Penso che nel tuo caso facendo un T temp = default (T) userà reflection e il compilatore .NET nativo proverà a creare oggetti "temp" per contenere qualsiasi dato necessario per serializzare o deserializzare, ma non ne sa nulla, risultando in un KABOOM. obj.GetType lo farebbe per me in VB.net. Fai di quel ragazzo cattivo una variante senza creare un tipo predefinito e penso che starai bene. – sonofsmog