Winform アプリケーションは、イントラネットで ClickOnce を使用してリリースされています。GUI の個人的な好みを分離ストレージに保存します。すべてがかなりうまく動作します:)
問題は、アプリケーションの新しいバージョンを公開すると、すべての設定が失われることです! ユーザーは、バージョンごとに設定を何度もセットアップする必要があります。
バージョンではなく、アプリケーション全体の分離を凍結する方法はありますか?
Winform アプリケーションは、イントラネットで ClickOnce を使用してリリースされています。GUI の個人的な好みを分離ストレージに保存します。すべてがかなりうまく動作します:)
問題は、アプリケーションの新しいバージョンを公開すると、すべての設定が失われることです! ユーザーは、バージョンごとに設定を何度もセットアップする必要があります。
バージョンではなく、アプリケーション全体の分離を凍結する方法はありますか?
ドメインスコープの分離されたストレージではなく、アプリケーションスコープのストレージを使用する必要があります。これは、 IsolatedStorageFileStreamのオーバーロードされたコンストラクターの1つを使用して実行できます。
例:
using System.IO;
using System.IO.IsolatedStorage;
...
IsolatedStorageFile appScope = IsolatedStorageFile.GetUserStoreForApplication();
using(IsolatedStorageFileStream fs = new IsolatedStorageFileStream("data.dat", FileMode.OpenOrCreate, appScope))
{
...
ただし、このコードの問題は、アプリケーションがClickOnceを介して起動された場合にのみ機能するという問題に遭遇します。これは、アプリケーションスコープの分離ストレージが利用できるのはそれだけだからです。ClickOnce(Visual Studioなど)を介して起動しない場合、GetUserStoreForApplication()は例外をスローします。
この問題を回避する方法は、アプリケーションスコープの分離ストレージを使用する前に、AppDomain.CurrentDomain.ActivationContextがnullでないことを確認することです。
私は少し前に ClickOnce アプリに取り組んでおり、Environment.GetFolderPath(ApplicationData) を使用していました。たとえば、ローミング アプリのデータ フォルダーを使用して、すべての設定を保存していました。正常に動作し、多数の更新に耐えました。アプリの名前または CompanyName/AppName などのサブディレクトリを作成し、そこにすべてを保存するだけです。
データベースのようなより耐久性のあるストアに、ユーザー設定の永続的なバージョンを保存する必要があります。分離ストレージが利用可能な場合、アプリケーションはそれを使用することを決定できます。(新しいバージョンのため) 利用できない場合、アプリはデータベースから設定を取得し、それを使用して分離ストレージの設定を再初期化する必要があります。設定が変更された場合は、両方の場所を更新する必要があります。アプリの新しいバージョンがない限り、アプリは DB から設定を取得する必要はありません。