Visual Studio Community 2015を使用してUWPで日記アプリケーションを作成しようとしています。したがって、すべての日記エントリはObservableCollection(DiaryEntryタイプの3つの文字列)に保持されます。 AppクラスのOnSuspendingメソッドでは、(XmlSerializerを使用して)シリアル化し、ObservableCollectionをアプリケーションのLocalFolderに保存します。 AppクラスのOnLaunchedメソッドでは、データを逆シリアル化してObservableCollectionに再度配置します。UWPがリリースモードでシリアル化データを失う
このアプリケーションをデバッグモードで実行すると、毎回100%動作しますが、リリースモードでは、アプリケーションを閉じて再度開くとObservableCollectionが失われます。それ以外の場合は1回か2回は動作しますが、データは失われます。私が知りたいことは、私のアプリをリリースモードで動作させるにはどうすればいいのですか?
private async void SaveCollection(string xml)
{
//Serializing our observablecollection and saving it to the local folder
StorageFile sf = await ApplicationData.Current.LocalFolder.CreateFileAsync("Diary.txt", CreationCollisionOption.ReplaceExisting);
await Windows.Storage.FileIO.WriteTextAsync(sf, xml);
}
private async Task<string> GetSavedCollection()
{
try
{
Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
Windows.Storage.StorageFile sampleFile = await storageFolder.GetFileAsync("Diary.txt");
string text = await Windows.Storage.FileIO.ReadTextAsync(sampleFile);
return text;
}
catch (FileNotFoundException e)
{
return "";
}
}
public static string ToXml(ObservableCollection<DiaryEntry> d)
{
XmlSerializer serializer = new XmlSerializer(typeof(ObservableCollection<DiaryEntry>));
StringBuilder stringBuilder = new StringBuilder();
XmlWriterSettings settings = new XmlWriterSettings()
{
Indent = true,
OmitXmlDeclaration = true,
};
using (XmlWriter xmlWriter = XmlWriter.Create(stringBuilder, settings))
{
serializer.Serialize(xmlWriter, d);
}
return stringBuilder.ToString();
}
// Deserialize from xml
public static ObservableCollection<DiaryEntry> FromXml(string xml)
{
if (xml == "")
{
return new ObservableCollection<DiaryEntry>();
}
XmlSerializer serializer = new XmlSerializer(typeof(ObservableCollection<DiaryEntry>));
ObservableCollection<DiaryEntry> value;
using (StringReader stringReader = new StringReader(xml))
{
object deserialized = serializer.Deserialize(stringReader);
value = (ObservableCollection<DiaryEntry>)deserialized;
}
return value;
}
これは私がこれらのメソッドを呼び出す方法をされています:
これらは私が使用しています方法がある
日記= FromXml(GetSavedCollectionを待ちます());
SaveCollection(ToXml(Diaries));
データ処理の保存中にログを書き込もうとします。 – WPInfo
'NETCore.UniversalWindowsPlatform'はどちらを使いますか?最も高くなるようにしてください。 (5.3.1)。おそらく、この問題は.NETネイティブツールチェーンに関連しています。 –
アプリのビルド設定で '.NETネイティブツールチェーン'オプションが有効になっている場合は、 'Microsoft.NETNative.Analyzer'を使用してください。したがって、コンパイラーで互換性のないコードを見ることができます。 NuGetパッケージはこちら=> https://www.nuget.org/packages/Microsoft.NETNative.Analyzer/ –