2013-06-13 6 views
6

私のWindows phone 8、C#Appには次のような奇妙な動作があります。windows phone 8、applicationsettingsは永続化されません。

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

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 - 辞書にはゼロ(0)のキーと値が含まれています。

何か不足していますか?

ISETool.exeを使用して、私のアプリのIsolatedStorageのスナップショットを取得しました(chepeneのおかげで)。 私はこの動作を見ました。設定を書き込むと(SaveProperty<T>()の機能が終了したことを意味します)、アプリケーションはまだ実行されていますが、設定は_ApplicationSettingsに保存されています。これは、私の観察と一致して、私がIsolatedStorageSettings.ApplicationSettingsからアプリを実行しているときに読むことができるということに同意します。 _ApplicationSettings - ファイルが破棄されているか、実行されていないときにも表示されます(アプリが戻るボタンで閉じられている場合、のバックボタンを押してアクセスできます)。

しかし、アプリは(アプリリストを経由して)再び開いたときに、_ApplicationSettings -fileがなくなって...

私は IsolatedStorageにファイルを書いているときに私はまた、それを見る

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

このファイルを読んでいないと、次回にアプリケーションを開くと消えてしまいます。

ところで、混乱を避けるために、私はではありません。私はそれを開くたびにアプリケーションを再インストールしています。

詳細が必要な場合はお尋ねください。

助けてください。

+0

エミュレータまたはデバイスを使用していますか?エミュレータが使用されている場合は、ビジュアルスタジオのデバッグセッションまたはエミュレータの「戻る」ボタンを停止してアプリケーションを終了していますか? –

+0

'Save()'メソッドの後、あなたのアプリの隔離されたストレージにどのファイルが存在するかを(Isolated Storage Explorerで)調べます。 – Chepene

+0

@Beytan Kurt:デバイスを使用していますが、エミュレータもチェックしました。同じ動作です。私はアプリを直接終了するのではなく、アプリリストからアプリを開いて再オープンするのではありません。 –

答えて

0

quetzalcoatlのおかげで解決策が見つかりました: 私のアプリケーションのルートフォルダにすべてのファイルを保存しています。最初は、すべてのファイルを(DataContractSerializerを介して)読み込み、モデルにキャストしています。私のファイルが破損することが時々起こるので、私はSerialzationExceptionを投げるすべてのファイルを削除します。しかし、私がすべてのファイルを読むと、_ApplicationSettingsは私のモデルにキャスタブルではないので、私は_ApplicationSettingsを自動的に削除しています....それで、私はApplicationSettingsがルートフォルダ内のファイルであることを知りましたを削除してください。したがって、根本的なのは、ルートフォルダに書き込むことではありません。

+0

素晴らしい!私はあなたがそれを見つけてうれしく、それはまだ別の奇妙なWPhoneの行動ではありません:)誰もが解決したことを知っているようにあなたの答えを "受け入れ"(その "V"ダニ)としてマークしてください。 – quetzalcoatl

+0

私は48時間で自分の答えを「受け入れた」とマークすることができます。しかし、私はこれを行う;) –

3

AppSettingsではWP7/7.5でも同様のことが起こりましたが、プロパティ値の型がシリアライザに知られていないクラスである場合にのみ発生しました。保存中

  • アプリケーションの終了時に(アプリケーションがその時点での設定をダンプするかもしれないので)
  • アプリの設定をロードする時間の間に:

    には、例外がなかったことをあなたは確かにあります発売後初めて?

これは必ずしもアプリのクラッシュを意味するものではありません。つまり、内部例外やユーザー処理も例外ではありません。 VisualStudioの出力パネルで「最初のチャンスの例外」ログを確認してください。 I/Oまたはセキュリティまたはシリアル化の例外が表示された場合は、そこで調査してください。私がうまく覚えていれば、デバッグ/例外メニューから簡単に傍受可能な隔離されたストレージ例外もあります。

しかし、私が未知のまたは直列化できないタイプで持っていた問題は、あなたの特別な非appsettingsファイルが蒸発する理由を全く説明していません。

別の考え:おそらく、いくつかの追加ツールがあなたのために「クリーン展開」のような機能を果たしているのでしょうか?私は正確に覚えていないが、私はVisualStudioをの配備サイクルが非常に平易だったと思う:

  • が再構築
  • 削除/デバイスから古いアプリをアンインストールする - のではおそらく粛清が
  • が上に新しいアプリをインストールisolatedstorageデバイス

それはおそらく原因でしょうか? Hm ..あなたの質問をもう一度読んでから、あなたはアプリをapplistから実行していると言ってきたので、むしろそうではありません。最初のチャンスの例外をチェックしてください!

+0

'System.Runtime.Serialization.ni.dll'に' System.Runtime.Serialization.SerializationException'があります。しかし、今私はちょうど試みました: 'IsolatedStorageSettings.ApplicationSettings.Add(" test "、" testwert ");'私は何も気にしないことをしませんでした。単純な文字列を追加するだけです。シリアライザにとっては難しいことではありません...だから、私はこの例外を見たので、何ができますか?この例外は、アプリの起動時に発生することをお待ちしています。設定が保存されていないとき... –

+1

それを傍受し、メッセージの内容を確認しようとしましょう。アプリケーションを停止し、VisualStudioに移動し、[デバッグ]メニューから[例外...]を選択し、ツリー内でその名前空間と例外を見つけて「投げたとき」を確認します。今度は、「デバッグ」を介してアプリケーションを1〜2回起動してみてください。例外が表示された場合、デバッガは即座に停止する可能性が高いです。それが起こると、典型的な「例外アシスタント」を手に入れ、メッセージを読んだり、スタックトレースをチェックしたりすることができます。 – quetzalcoatl

+0

しかし、唯一の "デバッグ"は古いアプリの設定を消去するかもしれません。私はそれを覚えていません、申し訳ありません。しかし、私はかなり正確な方法で私のSerializationExceptionsを傍受して調査していると確信しています(しかし、AppStartではなくAppStartで私の問題が起こっていました)。 – quetzalcoatl

関連する問題