2012-09-07 6 views
7

Nella mia applicazione WinRT memorizzo i dati utente (non i dati di sessione) in un file locale. Il file viene salvato e caricato tramite ApplicationData.Current.LocalFolder.La modifica dell'appmanifest di un'applicazione WinRT distrugge i dati dell'app

Ogni volta che apporto una piccola modifica al manifest dell'app, questi file salvati e le impostazioni dell'app verranno invalidati e cancellati all'avvio dell'app. Questo è solo nell'ambiente di sviluppo, così o succederà anche quando il pacchetto è stato pubblicato nell'app store?

Come si impedisce al sistema di eseguire questa operazione? L'utente sarà molto infelice se perderà i suoi dati a causa di un cambio di versione!

Update 1:
Grazie a Hans Passant, ho imparato che anche data files have a Version. L'impostazione della versione del file di dati ha risolto il problema per le modifiche alla versione (solo incremento), ma non per il resto delle modifiche manifest.

Aggiornamento 2:
Nel frattempo ho anche osservato che non solo modifica delle proprietà del file manifest hanno questo effetto. Se aggiungo un nuovo file di risorse per una nuova lingua (localizzazione), anche i dati verranno cancellati. Sarebbe davvero bello sapere se questo strano comportamento sarà presente anche nelle app installate pubblicate tramite il negozio.

+1

Sembra che tu stia modificando la versione dell'app. Guarda il metodo ApplicationData.SetVersionAsync(). –

risposta

0

Ciò dovrebbe verificarsi solo in un ambiente di sviluppo. Una volta pubblicata l'app, il manifest è fisso e non cambierà *.

* Tranne le circostanze seguenti 1) lo si cambia e si ricaricano e 2) il manifest sarà probabilmente modificato dal processo di certificazione, e questo è normale.

+0

Non capisco: se apporto modifiche all'app, sono abituato a incrementare la versione delle applicazioni. E poiché MS ha integrato il numero di versione nell'app-manifest, penso che vogliano che impostiamo il numero di versione lì. Ma se cambio il numero di versione a causa di alcune estensioni o correzioni dell'app e poi aggiorna l'app aggiornata nello store, non voglio che i dati delle app vengano cancellati. Oppure mi manca interpretare la tua risposta? – HCL

+0

La modifica di un numero di versione in un'app distribuita nell'archivio non deve sovrascrivere i dati già presenti sul dispositivo. Almeno, questa è la mia comprensione. – ZombieSheep

2

La risposta alla mia domanda sembra non essere così facile. Alla fine ho osservato che esso consiste probabilmente di due problemi diversi. Nel web ho trovato solo molto little Information, quindi tutto quello che scrivo qui è un po 'speculativo, basato su alcuni semplici test che ho fatto.

versione cambia
Grazie a Hans Passant, ho imparato che i file di dati possono avere una version. A causa della mancanza di documentazione, che faccio il test della versione e impostazione versione come segue:

await ApplicationData.Current.SetVersionAsync((uint)1, (setVersionRequest) => { }); 

Il codice viene eseguito prima in qualsiasi momento a caricare i miei file di dati. Poiché al momento non ho modifiche nel mio formato di file, lascio la modifica callback vuota {}.
Dopo aver inserito il codice precedente, le modifiche alla versione non hanno più cancellato i dati delle mie app mentre si modificavano le proprietà della versione. Tuttavia, come test ho rimosso in seguito il codice e, inaspettatamente, qualsiasi modifica della versione non ha più cancellato i file di dati dell'app! Forse perché ora sono versioni. (Come sidemark: decrementando la versione risulta sempre una perdita dei file di dati).

generale manifesto Modifiche
L'effetto che modifica delle proprietà del manifesto (ad eccezione della versione-properties) cancella i dati non è stato andato. Se cambio ad esempio la descrizione dell'app, tutti i dati verranno cancellati. Ho trovato alcuni post che indovinano che questo non si verificherà nel negozio, ma non ho trovato alcuna prova.

aggiunta di Lingue
Un altro effetto che ho osservato, è che se aggiungo una nuova lingua per l'applicazione (aggiunta di un ressource-file) fa lo stesso.

Nota: tutte le spiegazioni sopra riportate si basano sulle osservazioni del mio ambiente di sviluppo. Non ho trovato alcuna documentazione concreta e quindi raccomando a tutti di testare molto bene i casi d'uso in questione per non rendere i vostri clienti molto infelici. Probabilmente tra qualche mese, ci sarà più documentazione concreta disponibile.

Problemi correlati