アプリケーション設定の概要

この記事では、アプリケーションとユーザーのために設定データを作成して保存する方法について説明します。

Windows フォームのアプリケーション設定の機能により、カスタム アプリケーションと、クライアント コンピューター上のユーザー設定の作成、保存、および保守が簡単になります。 Windows フォーム アプリケーションの設定ではデータベースの接続文字列など、アプリケーションのデータだけでなく、ユーザー アプリケーションの設定などのユーザー固有のデータを格納することができます。 Visual Studio またはカスタムのマネージド コードを使用して、新しい設定の作成、ディスクからの読み取りまたは書き込み、フォームのプロパティへのバインド、および読み込みと保存の前の設定データの検証を実行することができます。

アプリケーション設定を使用すると、開発者はカスタム コードをほとんど使用しないでアプリケーションの状態を保存できます。これは、.NET Framework の以前のバージョンの動的プロパティに代わるものです。 アプリケーション設定には、読み取り専用で、遅延バインディングであり、複数のカスタム プログラミングを必要とする動的プロパティに対する多くの機能強化が含まれます。 動的プロパティ クラスは .NET Framework 2.0 では保持されていますが、それらはアプリケーション設定クラスを薄くラップするシェル クラスです。

アプリケーション設定とは何か

Windows フォーム アプリケーションでは、アプリケーションの実行に欠かせないものの、アプリケーションのコードに直接含めたくないデータが必要になることがよくあります。 アプリケーションで Web サービスまたはデータベース サーバーを使用する場合、この情報を別のファイルに保存することで、将来再コンパイルせずにこれを変更することができます。 同様に、アプリケーションは、現在のユーザーに固有の格納データを必要とすることがあります。 たとえば、ほとんどのアプリケーションでは、アプリケーションの外観と動作をカスタマイズするユーザー設定があります。

アプリケーション設定は、クライアント コンピューターにアプリケーション スコープとユーザー スコープの両方の設定を保存する簡単な方法を提供することにより、両方のニーズに対応します。 Visual Studio またはコード エディターを使用して、名前、データ型、およびスコープ (アプリケーションまたはユーザー) を指定して特定のプロパティの設定を定義します。 使いやすさと読みやすさのために、関連する設定を名前付きのグループに配置することもできます。 これらの設定は、定義された後も保持され、実行時に自動的にメモリに読み込まれます。 プラグ可能なアーキテクチャにより永続化メカニズムを変更できますが、既定では、ローカル ファイル システムが使用されます。

アプリケーションの設定は、設定がアプリケーション スコープかユーザー スコープかに応じて、別の構成 (.config) ファイルに XML としてデータを保持することで機能します。 ほとんどの場合は、アプリケーション スコープ設定は読み取り専用です。これは、アプリケーション スコープ設定がプログラム情報であり、通常は上書きする必要がないためです。 これに対し、ユーザー スコープ設定は、アプリケーションが部分信頼で実行されている場合でも、実行時に安全に読み書きできます。 部分信頼の詳細については、「 Security in Windows Forms Overview」を参照してください。

設定は、構成ファイルの XML フラグメントとして格納されます。 アプリケーション スコープ設定は <applicationSettings> 要素によって表され、通常は app.exe.config に配置されます。ここで、 app はメインの実行可能ファイルの名前です。 ユーザースコープの設定は、<userSettings> 要素によって表され、user.config に入れられます。app.exe.config ファイルはアプリケーションと共にデプロイする必要があります。user.config ファイルは、アプリケーションがそのユーザーの設定を初めて保存するときに、必要に応じて設定アーキテクチャで作成されます。 また、 <userSettings> app .exe.config 内でブロックを定義して、ユーザー スコープ設定の既定値を指定することもできます。

カスタム コントロールでは、 IPersistComponentSettings メソッドを公開する SaveSettings インターフェイスを実装することで、独自の設定を保存できます。 Windows フォーム ToolStrip コントロールは、このインターフェイスを実装して、アプリケーション セッション間でのツールバーとツールバー項目の位置を保存します。 カスタム コントロールとアプリケーション設定の詳細については、「 Application Settings for Custom Controls」を参照してください。

ユーザースコープの設定の保存場所

既定のプロバイダー LocalFileSettingsProvider では、ユーザースコープの設定を LocalApplicationData フォルダーに保存します。 そのフォルダーが使用できない場合は、ApplicationData フォルダーが使用されます。 ユーザースコープの設定ファイルを保存する、アプリ固有のサブフォルダーが作成されます。 このフォルダーの名前は、アプリのメイン アセンブリに関する 3 つの属性に基づきます。

  • アセンブリの CompanyName
  • 2 種類の情報に基づくハッシュ値。
    • アセンブリの FriendlyNameFriendlyName が使用できない場合は、ProductName が使用されます。
    • アセンブリの StrongName (使用可能な場合)。そうでない場合は、アセンブリへの絶対フォルダー パスが使用されます。
  • AssemblyName.Version の文字列。

上記のアセンブリの詳細のいずれかが変更された場合、前のユーザースコープの設定は失われます。新しいサブフォルダー名が生成されるためです。 たとえば、新しいバージョンのアプリがリリースされ、AssemblyName.Version 値が以前のバージョンと異なる場合、ユーザースコープの設定の保存に使用されるサブフォルダーの名前が変更されます。 アプリのリリースが変わってもユーザー設定を保持する必要がある場合は、カスタム設定プロバイダーを作成します。 詳細については、「カスタム設定プロバイダー」を参照してください。

アプリケーションの設定の制限事項

.NET Framework をホストするアンマネージド アプリケーションで、アプリケーション設定を使用することはできません。 Visual Studio アドイン、C++ for Microsoft Office、Internet Explorer のコントロール ホスト、Microsoft Outlook のアドインやプロジェクトなどの環境では、設定は機能しません。

現在、Windows フォームの一部のプロパティをバインドできません。 最も注目に値する例は、 ClientSize プロパティで、このプロパティへのバインドにより、実行時に予期しない動作が発生します。 これらの設定をプログラムで保存して読み込むことで、通常はこれらの問題を回避できます。

アプリケーション設定には、情報を自動的に暗号化するための組み込みの機能がありません。 データベースのパスワードなどのセキュリティ関連の情報は、クリア テキストで保存しないでください。 このような機密情報を格納する場合、アプリケーション開発者に、機密情報の安全性を確保する責任があります。 接続文字列を格納する場合は、URL にパスワードをハード コーディングするのではなく、Windows 統合セキュリティを使用することをお勧めします。 詳細については、「 Code Access Security and ADO.NET」を参照してください。

アプリケーション設定の概要

Visual Studio を使用している場合に、Windows フォーム デザイナーの [プロパティ] ウィンドウの (ApplicationSettings) プロパティを使用して設定を定義することができます。 この方法で設定を定義する場合、Visual Studio によって、各設定をクラス プロパティに関連付けるカスタムのマネージド ラッパー クラスが自動的に作成されます。 また、Visual Studio は、フォームが表示されるとコントロールの設定が自動的に復元され、フォームが閉じられると自動的に保存されるように、フォームまたはコントロールのプロパティへの設定のバインドも処理します。

設定のより詳細なコントロールが必要な場合は、独自のカスタムのアプリケーション設定のラッパー クラスを定義することができます。 これは、 ApplicationSettingsBaseからクラスを派生させ、各設定に対応するプロパティを追加して、これらのプロパティに特別な属性を適用することで実現します。 ラッパー クラスを作成する方法については、「 Application Settings Architecture」を参照してください。

また、 Binding クラスを使用して、フォームとコントロールのプロパティに設定をプログラムでバインドすることもできます。

関連項目