[解決済み] .NETデスクトップアプリのSettings.settingsとapp.configの比較 [重複] [重複
質問
重複の可能性があります。
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の内容をすべて削除することも可能です。
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み] BasicHttpsBindingとWsHttpBinding with Transport securityの違いは何ですか?
-
[解決済み] AndroidでWCFサービスを利用する方法
-
[解決済み] csilogfileは何のためにあるのですか?
-
[解決済み] LINQ: フィルタリング基準で SingleOrDefault と FirstOrDefault() を使用する場合
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] C#で文字を繰り返し表示する最適な方法
-
[解決済み] .NETでapp.configやweb.configから設定を読み込む
-
[解決済み] .NET Core 2.0でConfigurationManager.AppSettingsは利用可能ですか?
-
[解決済み] App.config: ユーザースコープとアプリケーションスコープ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] <Database> コンテキストを支えるモデルが、データベース作成後に変更されました。
-
[解決済み] Html.BeginForm()にCSSクラスを追加する。
-
[解決済み] ファイルまたはアセンブリ 'System.Data.SQLite' をロードできませんでした。
-
[解決済み] 24:00:00 を超える値を持つ .Net Timespan を格納するための正しい SQL タイプは何ですか?
-
[解決済み] ASP.NET control to render a <div>
-
[解決済み] LINQ: フィルタリング基準で SingleOrDefault と FirstOrDefault() を使用する場合
-
[解決済み] 権限 '*' を持つ SSL/TLS の安全なチャネルを確立できませんでした。
-
[解決済み] Powershell v3 Invoke-WebRequest HTTPSエラー
-
[解決済み] MemoryStreamから文字列を取得する方法は?
-
[解決済み] Visual Studioのコンパイルエラー "mismatch between processor architecture "を修正するにはどうしたらいいですか?