1. ホーム
  2. .net

[解決済み] .NETデスクトップアプリのSettings.settingsとapp.configの比較 [重複] [重複

2023-02-08 08:06:43

質問

重複の可能性があります。

app.config ファイルと XYZ.settings ファイルの違いは何ですか?

デスクトップ アプリケーションの設定を保存および管理するために、Visual Studio でこれら 2 つのメカニズムが明らかに重複していることに、私はかなり困惑しています。

  • デスクトップ アプリケーションの設定を保存するために、XML app.config ファイルに項目を追加し <appSettings> セクションに項目を追加します。これらは、コードから ConfigurationManager クラスを使ってコードから取得できます。
  • または、Settings.settings ファイルを使用して、エディターから個々の設定を追加することもできます。Visual Studio は Settings クラスを生成し、実行時に設定をタイプセーフで取得します。

これら 2 つのメカニズムは、同じ (またはほぼ同じ) 目的を果たすように見えます。いくつかの相違点があることは承知していますが、重複とその結果にも困惑しています。たとえば、私が Visual Studio を使用して、設定を Settings.settings ファイルに設定を追加すると、入力したすべての情報が app.config ファイルにも書き込まれます。どうやら、同期のメカニズムが存在するようです。 app.config ファイルの設定を変更すると、Visual Studio は Settings.settings ファイルを次回エディターで開いたときに更新するよう求めるメッセージが表示されます。

私の質問は

  • なぜ、1 つではなく 2 つのメカニズムなのですか?
  • を使用する最も一般的なシナリオは何ですか? app.config 以上 Settings.settings とか、その逆は?
  • 私のアプリが Settings.settings を使っていて app.config の値を変更することはできますか?の同期が取れません。 Settings.settings の同期は行われません。

注意してください。このトピックに関する質問を検索してみましたが、さらに混乱しています。例えば、回答が この質問 の回答はかなり矛盾しており、あまり光を当てていません。

注2. 私が認識しているのは app.config は設計時のファイル名であり、Visual Studio がそれを実行フォルダにコピーして名前を変更する力学に精通しています。

どのように解決するのですか。

.NET Framework の観点から見ると (Visual Studio というツールの話は今はしていません)、歴史的には [app.exe].config (実際、それはAppDomainが設定ファイルとして定義しているものです。名前はAppDomainによって定義されます、それはそれが理由です web.config であるのはそのためです)、そして machine.config . app'はアプリケーションと一緒にデプロイされ、'machine'はマシン全体に対するものです。これらは、一般的なユーザーにとっては「かなり」読み取り専用になるはずでした。変更することは可能ですが、それはアイデアではありませんでした。

しかし、それではどのようにエンドユーザーのプリファレンスを保存すればよいのでしょうか。それが、[user].config が導入された理由です (確か .NET 2 で導入されたはずです)。公式ドキュメントにはこのように書かれています。

.NET Framework で最初にリリースされた構成システムは、静的なアプリケーション構成データの提供をサポートしています。 Framework でリリースされた構成システムは、静的なアプリケーション構成データの提供をサポートしています。 ローカル コンピューターの machine.config ファイルまたはアプリケーションと共に配布される app.exe.config ファイルを通して、静的なアプリケーション構成データを提供することをサポートしています。また LocalFileSettingsProvider クラスは、このネイティブサポートを次のように拡張します。 以下の方法で拡張します。

1) アプリケーションに依存する設定は、machine.config または app.exe.config ファイルのいずれかに保存できます。 または app.exe.config ファイルに保存できます。Machine.config は常に読み取り専用です。 app.exe.config はセキュリティの考慮により、ほとんどのアプリケーションで読み取り専用に制限されています。 ほとんどのアプリケーションで読み取り専用に制限されます。

2) ユーザー定義の設定は app.exe.config ファイルに格納することができ、その場合、静的なデフォルトとして扱われます。 その場合、それらは静的なデフォルトとして扱われます。

3) デフォルトでないユーザー定義の設定は、新しいファイルに格納されます。 ここで、user は現在アプリケーションを実行している人のユーザー名です。 ここで、ユーザーは現在アプリケーションを実行している人のユーザー名です。ユーザー定義設定のデフォルトを指定するには、DefaultSettingValue 設定にデフォルトを指定できます。ユーザーを指定した設定は、アプリケーションの実行中に変更されることが多いため の設定は、アプリケーションの実行中に変更されることが多いため、user.configは常に読み取り/書き込み可能です。 は常に読み取り/書き込みが可能です。

つまり、.NET Frameworkの観点からは、3層の仕組みは1つしかないのです。

さて、Visual Studio は最終的な読み取り/書き込み設定のためのタイプセーフ コードを生成することであなたを助けようとしているだけです。ほとんどの場合、[user].config ファイルは存在せず、設定値は DefaultSettingValueAttribute (各設定ごとに定義)で定義するか、app.configで静的に定義されているものを使用することになります。そのため、Visual Studioでもapp.configファイルを更新して、設定に静的なデフォルトを定義できるようにしているのです。しかし、app.configの内容をすべて削除することも可能です。