ApplicationSettingsBase クラス自体は設定の永続化も読み込みも行いません。この作業は SettingsProvider の派生クラスである設定プロバイダによって行われます。ApplicationSettingsBase の派生クラスが SettingsProviderAttribute を使用して設定プロバイダを指定しない場合は、既定のプロバイダである LocalFileSettingsProvider が使用されます。
もともと .NET Framework と共にリリースされた構成システムでは、ローカル コンピュータの machine.config ファイルまたはアプリケーションと共に配置する app.exe.config ファイルを介した、静的なアプリケーション構成データの提供がサポートされています。LocalFileSettingsProvider クラスによって、このネイティブ サポートが次のように拡張されます。
アプリケーション スコープの設定は machine.config ファイルまたは app.exe.config ファイルに格納できます。machine.config は常に読み取り専用です。一方、app.exe.config はセキュリティ上の配慮から、大部分のアプリケーションで読み取り専用に制限されています。
ユーザー スコープの設定は app.exe.config ファイルに格納できます。この場合、設定は静的な既定値として扱われます。
既定値以外のユーザー スコープの設定は、user.config という新しいファイルに格納されます。user は現在このアプリケーションを実行しているユーザーの名前です。ユーザー スコープの設定の既定値は、DefaultSettingValueAttribute を使用して指定できます。ユーザー スコープの設定はアプリケーションの実行時に変更されることがよくあるため、user.config は常に読み取り/書き込み用となります。
この 3 つの構成ファイルはいずれも XML 形式で設定を格納します。アプリケーション スコープの設定の最上位 XML 要素は、<appSettings> で、ユーザー スコープの設定の最上位 XML 要素は <userSettings> です。アプリケーション スコープの設定およびユーザー スコープの設定の既定値を含む app.exe.config ファイルは、次のようになります。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="WindowsApplication1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</sectionGroup>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="WindowsApplication1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" />
</sectionGroup>
</configSections>
<applicationSettings>
<WindowsApplication1.Properties.Settings>
<setting name="Cursor" serializeAs="String">
<value>Default</value>
</setting>
<setting name="DoubleBuffering" serializeAs="String">
<value>False</value>
</setting>
</WindowsApplication1.Properties.Settings>
</applicationSettings>
<userSettings>
<WindowsApplication1.Properties.Settings>
<setting name="FormTitle" serializeAs="String">
<value>Form1</value>
</setting>
<setting name="FormSize" serializeAs="String">
<value>595, 536</value>
</setting>
</WindowsApplication1.Properties.Settings>
</userSettings>
</configuration>構成ファイルのアプリケーション設定セクションに含まれる要素の定義については、「アプリケーション設定のスキーマ」を参照してください。
設定のバインディング
アプリケーション設定では、Windows フォーム データのバインディング アーキテクチャを使用し、設定オブジェクトと設定コンポーネントの間で、設定の更新を双方向で通信します。Visual Studio を使用してアプリケーション設定を作成し、その設定をコンポーネントのプロパティに割り当てる場合、このバインディングは自動的に生成されます。
IBindableComponent インターフェイスをサポートするコンポーネントに対しては、アプリケーション設定のバインド以外は実行できません。また、コンポーネントでは、特定のバインドされたプロパティに変更イベントを実装するか、INotifyPropertyChanged インターフェイスを使用してプロパティの変更をアプリケーション設定へ通知する必要があります。コンポーネントで IBindableComponent を実装せずに Visual Studio を使用してバインドした場合、バインドされたプロパティは初回のみ設定されますが、更新されません。コンポーネントが IBindableComponent を実装してもプロパティの変更通知をサポートしていない場合、プロパティが変更されたときに設定のバインディングは更新されません。
ToolStripItem など、一部の Windows フォーム コンポーネントは、設定のバインディングをサポートしていません。
設定のシリアル化
設定ファイルの場所
app.exe.config ファイルおよび user.config ファイルの場所は、アプリケーションのインストール方法によって異なります。Windows フォーム ベースのアプリケーションをローカル コンピュータにコピーした場合、app.exe.config はアプリケーションのメインの実行可能ファイルのベース ディレクトリと同じディレクトリに配置され、user.config は Application..::.LocalUserAppDataPath プロパティで指定した場所に配置されます。アプリケーションを ClickOnce を使用してインストールした場合、どちらのファイルも %InstallRoot%\Documents and Settings\username\Local Settings の下にある ClickOnce のデータ ディレクトリに配置されます。
ユーザーがローミング プロファイルを有効にしている場合、これらのファイルの格納場所はわずかに異なります。ローミング プロファイルでは、ユーザーがドメイン内の別のコンピュータを使用する際に Windows とアプリケーションに対して異なる設定を定義できます。この場合、ClickOnce アプリケーションも ClickOnce 以外のアプリケーションも、app.exe.config ファイルおよび user.config ファイルが %InstallRoot%\Documents and Settings\username\Application Data に格納されます。
アプリケーション設定機能と新しい配置テクノロジの連携の詳細については、「ClickOnce とアプリケーション設定」を参照してください。ClickOnce のデータ ディレクトリの詳細については、「ClickOnce アプリケーションにおけるローカル データおよびリモート データへのアクセス」を参照してください。