6

私のシナリオ

複数の個別の実行可能アプリケーションから呼び出されるクラス ライブラリがあります。このクラス ライブラリは、アクセスするデータベース サーバーのアドレス (およびその他の多くの構成オプション、認証情報など) を知る必要があります。クラス ライブラリとは別に、これらの構成オプションを把握して設定する必要がある構成および管理アプリケーションがあります。

私の質問

これらのユーザー固有の構成オプションを Windows レジストリに格納するのが一般的な方法ですか、それとも、クラス ライブラリに典型的な 'App.config' XML アプローチを使用し、構成ツールがそれを変更および修正できるようにすることが望ましいですか?

私はレジストリのアプローチに傾倒していますが、多くの人がそれを使用しないという意見を持っていることを知っています. あなたならどうしますか?

4

4 に答える 4

5

ベスト プラクティスは、ユーザーの %appdata% ディレクトリにある XML 構成ファイルを使用することです。

これにはいくつかの理由があります。

  1. アプリケーションは、Program Files にインストールされる可能性が最も高いです。ユーザーがアプリケーションのプロセスに対する管理者権限を付与していない (または付与されていない) 場合、ファイルに書き込むことはできません。
  2. 私は、レジストリへのアクセスが単にオプションではない、部分的に信頼された環境で働いてきました。クライアントは、そのサーバー上の .NET ランタイムに対するレジストリ アクセス許可を完全に無効にしていました。
  3. ユーザーは常に自分の %appdata% ディレクトリにアクセスできる必要があります。サンプルは次のとおりです。

    string configFilePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "myAppConfig.config";
    ExeConfigurationFileMap map = new ExeConfigurationFileMap();
    map.ExeConfigFilename = configFilePath;
    Configuration cfg = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
    cfg.AppSettings.Settings.Add("mySetting", "myValue!");
    cfg.Save(ConfigurationSaveMode.Modified);
    
    // to read the setting back
    
    string mySetting = cfg.AppSettings.Settings["mySetting"].Value;
    // at this point, mySetting = "myValue!"
    

System.Configuration v2.0.0.0 参照をプロジェクトに追加することを忘れないでください! デフォルトの System.Configuration 名前空間には、必要なクラスがすべて含まれているわけではありません。

于 2010-03-02T17:17:28.963 に答える
1

クラスを作成し、xmlSerializer を使用してクラスを開いて直接クラスに保存できるため、レジストリ設定よりも xml 構成を好みます。

同様のSOの質問については、このトピックを確認してください。

于 2010-02-03T17:20:16.767 に答える
0

レジストリを確実に使用することはありませんが、アプリケーション全体の単純な設定では、EXEと同じ場所に独自のXMLファイルをロールし、独自のクラスを使用してアクセスします。この種のことについては、.NETでの設定処理は非常に複雑であり、以前ほど悪くはありません。

于 2010-09-27T20:31:50.927 に答える
0

私の特定のケースでは、これらの特定の構成設定をレジストリに保存する方が理にかなっています。ユーザーがアプリケーションを同じ場所にインストールするとは断言できません。少なくとも、「マスター」構成 XML ファイルの場所をレジストリに保存して、他のアプリケーションがそれを見つけられるようにする必要があります。 .

Hashtable ( ) のように構成設定をレジストリに読み書きするためのインデックスを持つクラスを簡単に作成し、string ponySetting = myRegistryObject["DefaultPonySetting"]それを 1 日と呼びました。とにかく、他のすべてのアプリケーションでこのクラスを使用してメイン アセンブリを参照します。フザ

于 2010-03-02T16:57:35.387 に答える