私が自分のアプリケーションを墓石にしようとしたとき、私は自分の電話でこれを経験してきました。
データコントラクト名が「UTF8Encoding:http://schemas.datacontract.org/2004/07/System.Text」の「System.Text.UTF8Encoding」と入力することはできません。静的に不明なタイプを既知のタイプのリストに追加します。たとえば、KnownTypeAttribute属性を使用するか、DataContractSerializerに渡される既知のタイプのリストにそれらを追加します。
アプリのどこでもWCFまたはデータコントラクトを使用しておらず、トゥームストーンでコードを実行していないため、これがどこから来ているのかわかりません。コードのどこにもそのテキストやスキーマはありません。
スタックトレースでは、実行されているコードが表示されません。
System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(DataContract dataContract、XmlWriterDelegator xmlWriter、Object obj、Boolean verifyKnownType、RuntimeTypeHandledeclaredTypeHandle) ..。 System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(XmlWriterDelegatorライター、オブジェクトグラフ)で System.Runtime.Serialization.XmlObjectSerializer.WriteObject(XmlDictionaryWriterライター、オブジェクトグラフ)で System.Runtime.Serialization.XmlObjectSerializer.WriteObject(ストリームストリーム、オブジェクトグラフ)で Microsoft.Phone.Shell.StreamPersister.Serialize(IDictionary`2辞書、IEnumerable`1 knownTypes)で Microsoft.Phone.Shell.StreamPersister.Save(ShellPageManager shellPageManager、String key、IDictionary`2辞書、IEnumerable`1 knownTypes)で Microsoft.Phone.Shell.PhoneApplicationService.FireDeactivate()で Microsoft.Phone.Execution.NativeEmInterop.FireOnPause()で
このようなものをデバッグするにはどうすればよいですか?
解決策:簡単ではありませんが、デバッグメニューで例外を有効にすることから始めます。次に、shift + f9を使用していくつかの値を試し、原因を確認します。最終的な答えは、アプリがこのようなもので閉じる前に状態をクリアすることです。
Application_Deactivated or Closing(){
SerializeToPhone(); //save state to phone manually
var appService = PhoneApplicationService.Current;
appService.State.Clear();
}
このようにして、オブジェクトをクリアして、電話が状態を管理しようとしないようにします。カスタムシリアライザーを使用して電話に状態を保存し、再アクティブ化時に電話から読み取るための独自のコードを追加しました。アプリが十分に単純で、WebセキュリティやFacebookログインなどがない文字列と数字だけであれば、墓石を処理するために電話に任せることができると思います。私の場合、より堅牢なシステムが必要でした。