6

Windows phone 8、C# アプリで次の奇妙な動作があります。

私は設定を保存しています:

private void SaveProperty<T>(T property, string propertyName)
    {
        if (IsolatedStorageSettings.ApplicationSettings.Contains(propertyName))
            IsolatedStorageSettings.ApplicationSettings[propertyName] = property;
        else
            IsolatedStorageSettings.ApplicationSettings.Add(propertyName, property);

        IsolatedStorageSettings.ApplicationSettings.Save();
    }

アプリを実行すると、に保存したすべての設定を読み取ることができますIsolatedStorageSettings.ApplicationSettings

しかし、アプリを再度開く (アプリ リストから開く) と、IsolatedStorageSettings.ApplicationSettings-Dictionary にはゼロ ( 0) キーと値が含まれています。

何か不足していますか?

ISETool.exe を使用して、アプリの IsolatedStorage のスナップショットを作成しました (chepene のおかげです)。私はこの動作を見ました:設定を書いたとき(つまり、SaveProperty<T>()関数が終了した後)、アプリがまだ実行されている場合、設定は に保存されてい_ApplicationSettingsます。IsolatedStorageSettings.ApplicationSettingsこれは、アプリの実行中にから読み取ることができるという私の観察と一致しています。-_ApplicationSettingsファイルは、が廃棄されているか実行されていない場合にも存在します(電話の戻るボタンを押したままにしてアクセスできる場合、および戻るボタンでアプリを閉じた場合)。

しかし、(アプリリストを介して)アプリを再度開くと、_ApplicationSettingsファイルは消えています...

IsolatedStorageまた、ファイルをwithに書き込んでいるときに、次のこともわかります。

SharedStorageAccessManager.CopySharedFileAsync(
    Windows.Storage.ApplicationData.Current.LocalFolder, fileName+"orig", 
    Windows.Storage.NameCollisionOption.ReplaceExisting, fileID);

その後、このファイルを読み取らないと、次回アプリを開いたときに消えてしまいます。

ちなみに、混乱を避けるために、アプリを開くたびに再インストールしているわけではありません。

さらに情報が必要な場合は、お問い合わせください。

どんな助けでも感謝します。

4

2 に答える 2

3

AppSettings では、WP7/7.5 で同様の現象が見られましたが、プロパティ値の型がシリアライザーに認識されていないクラスである場合にのみ発生しました。

例外がなかったと確信していますか:

  • 保存中
  • アプリの終了中 (アプリはその時点で設定をダンプする可能性があるため)
  • アプリが起動後に初めて設定をロードする間?

これは必ずしもアプリのクラッシュを意味するわけではないことに注意してください。つまり、例外、内部的に沈黙させられたもの、またはユーザーが処理したものも例外です。VisualStudio の [出力] パネルで「最初の例外」のログを確認してください。I/O、セキュリティ、またはシリアライゼーションの例外が表示された場合は、そこで調査してください。よく覚えていれば、デバッグ/例外メニューから簡単にインターセプトできる分離ストレージ例外のセット全体さえあります。

ただし、不明なタイプまたはシリアル化できないタイプで発生した問題では、追加の非 appsettings ファイルが蒸発する理由がまったく説明されていません。

別の考え: 追加のツールが「クリーン デプロイ」のようなものを実行するのではないでしょうか? 正確には覚えていませんが、VisualStudio の展開サイクルは非常に単純だったと思います。

  • 再構築
  • デバイスから古いアプリを削除/アンインストールします-おそらく隔離されたストレージをパージします
  • デバイスに新しいアプリをインストールする

では、もしかしてそれが原因?うーん..後付けで質問をもう一度読み直して、アプリリストからアプリを実行することについてあなたは言ったので、そうではありません。その場合は、firstchance の例外を必ず確認してください。

于 2013-06-13T13:07:50.693 に答える
0

quetzalcoatl のおかげで解決策が見つかりました。すべてのファイルをアプリのルート フォルダーに保存しています。最初に、すべてのファイルを (DataContractSerializer 経由で) 読み取り、それをモデルにキャストします。ファイルが破損することが時々あるので、SerialzationException. しかし、すべてのファイルを読み取り_ApplicationSettings、モデルにキャストできないため、_ApplicationSettings自動的に削除しています....だから、ApplicationSettings はルートフォルダー内の単なるファイルであり、読み取り削除が許可されていることを知りました。したがって、真髄は、ルート フォルダーには絶対に書き込まないことです。

于 2013-06-13T19:41:44.147 に答える