次の方法で共有


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

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

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

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

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

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

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

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

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

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

ユーザー スコープの設定が格納されている場所

既定のプロバイダー (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 統合セキュリティを使用することをお勧めします。 詳細については、「コード アクセスのセキュリティと ADO.NET」を参照してください。

アプリケーション設定を始める

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

設定をより詳細に制御する場合は、独自のカスタム アプリケーション設定ラッパー クラスを定義できます。 これを行うには、ApplicationSettingsBaseからクラスを派生させ、各設定に対応するプロパティを追加し、これらのプロパティに特別な属性を適用します。 ラッパー クラスの作成の詳細については、「アプリケーション設定アーキテクチャの」を参照してください。

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

関連項目