2012-04-15 3 views
0

Ich habe eine Windows Phone App, die auf einer XML-Datendatei beruht, die mit der App geliefert wird. Wenn die App zum ersten Mal auf einem Telefon ausgeführt wird, lade ich die Datei in den isolierten Speicher. Sobald die Datei in den isolierten Speicher geladen wurde, verwendet die App die isolierte Speicherversion der Daten. In der nächsten Version meiner App (Marketplace-Update) enthält die XML-Datei mehr Elemente. Wie aktualisiere ich die Datendatei einmal pro App-Update (neue Version im Marketplace)?Ressourcen in isolierten Windows Phone 7 App-Speicher aktualisieren

Ich dachte, ich könnte den Dateinamen im isolierten Speicher ändern, aber das würde Müll zurücklassen. Ich könnte auch nach Ausnahmen suchen, wenn ich die XML-Datei lade, aber gibt es andere, elegantere Möglichkeiten? Ich möchte nicht jedes Mal nach der alten Datei im isolierten Speicher suchen, wenn meine App ausgeführt wird.

Das ideale Szenario wäre, ein Stück Code, die einmal ausgeführt werden würde, wenn die neue Version der App auf das Telefon geladen wird, gibt es eine Möglichkeit, das zu tun?

+1

Wenn die XML-Datei in der App gepackt ist, wenn Sie die App aktualisieren (und das neue Paket wird die neue XML-Datei haben), wird es einfach da sein. Nicht wirklich sicher, ich verstehe das Problem. –

+0

Guter Punkt. Wenn die App zum ersten Mal ausgeführt wird, lese ich die XML-Datei in den isolierten Speicher, und dann verwendet die App nur die Datei im isolierten Speicher. – Eugene

+0

Wenn nicht per 'App-Update' am Ende des ersten Absatzes, meinst du kein Marketplace-Update, sondern App-Launch oder sowas? –

Antwort

1

Meines Wissens gibt es kein „out of the box“ Ereignis, das ein einziges Mal ausgeführt wird Beim ersten Start einer App nach der Installation/Aktualisierung.

Sie würden zu Flagge haben die Sie sich selbst laufen, wie Sie bereits unter Angabe (die aktuelle Version speichern, vergleichen Version bei jedem Durchlauf des App zu sehen, ob App wurde aktualisiert!)

0

I denke Ich verstehe jetzt, was Sie wollen.

  1. Fügen Sie die XML-Datei als Ressource hinzu.
  2. Verwenden Sie GetResourceStream, um den Inhalt des XML zu erhalten.

Beachten Sie, dass der Name für die Ressource wäre so etwas wie/DllName sein; Komponente/Ordner/Resource

+0

Können Sie bitte näher erläutern, warum GetResourceStream für dieses Szenario funktioniert? – Eugene

+0

@Shahar - Er möchte nur eine Möglichkeit, die Datei zu versionieren und zu aktualisieren. –

+0

@Eugene: Es wird Ihnen nur einen Stream-Verweis auf die Datei geben, die in Ihrem XAP ist - ich denke, ich vermisse immer noch, was Sie versuchen zu tun. –

0

ist hier, was ich tat:

private bool AppIsOld 
{ 
    get 
    { 
     string storedVersion = GetStoredAppVersion(); //stored previously "seen" version 
     string currentVersion = GetCurrentlyRunningAppVersion(); 
     return !(storedVersion == currentVersion); 
    } 
} 


private string GetCurrentlyRunningAppVersion() 
{ 
    var asm = Assembly.GetExecutingAssembly(); 
    var parts = asm.FullName.Split(','); 
    return parts[1].Split('=')[1].ToString(); 
} 

Und dann laufe ich die folgende Kontrolle:

im Konstruktor Methode meiner DataLayer Klasse, ich den folgenden Code hinzugefügt

if (AppIsOld) 
    RefreshResources(); //do whatever to refresh resources 

Der Code für GetCurrentlyRunningAppVersion() Funktion wird von here übernommen.

Diese Lösung ist nicht, was ich im Sinn hatte, weil es jedes Mal ausgeführt wird, wenn der Klassenkonstruktor aufgerufen wird, während ich etwas wollte, das einmal nach Versionsupdate ausgeführt werden würde.