カスタム構成ファイルの読み込み


118

静的ConfigurationManager.OpenExe(exePath)メソッドを使用してアセンブリに関連する構成ファイルを開くことができることはわかっていますが、アセンブリに関連しない構成を開きたいだけです。ただの標準的な.NET構成ファイル。

回答:


244

リッキーによって投稿された記事は非常に良いですが、残念ながら彼らはあなたの質問に答えません。

問題を解決するには、次のコードを試してください。

ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
configMap.ExeConfigFilename = @"d:\test\justAConfigFile.config.whateverYouLikeExtension";
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);

構成内の値にアクセスする必要がある場合は、インデックス演算子を使用できます。

config.AppSettings.Settings["test"].Value;

1
@オリバーによってwhateverYouLikeExtension、あなたは後に何かを持っている必要あるということですconfig.か?
2015年

4
@オリバーは今すぐ試してみて、なしでも問題なく動作するようです:)
Svish

1
これを行いましたが、ConfigurationManager.ConnectionStringsにアクセスしても、古いデータを取得しています。何が欠けていますか?
MAW74656

1
@ MAW74656:にアクセスする必要はありませんConfigurationManager.ConnectionStrings。代わりにconfig、上記の最後のステートメントから返されたオブジェクトから値を読み取る必要があります。
Oliver

3
これが行われた後にappSettingsを取得する方法を検索している他の人のために:var foo = config.AppSettings.Settings ["test"]。Value;
Roro

8

設定ファイルは単なるXMLファイルです。次の方法で開くことができます。

private static XmlDocument loadConfigDocument()
{
    XmlDocument doc = null;
    try
    {
        doc = new XmlDocument();
        doc.Load(getConfigFilePath());
        return doc;
    }
    catch (System.IO.FileNotFoundException e)
    {
        throw new Exception("No configuration file found.", e);
    }
    catch (Exception ex)
    {
        return null;
    }
}

後で値を取得する:

    // retrieve appSettings node

    XmlNode node =  doc.SelectSingleNode("//appSettings");

後に到達不能コードが検出されましたthrow new Exception("No configuration file found.", e);
Oybek

戻り値のnullは削除します。実際には到達しません。
のOtavioDécio

7
.Netライブラリからこのような素晴らしいクラスがあるときにXMLを使用する理由 私はこれを使用することをお勧めしません、デザインが貧弱です。次は何?別の文字列クラスを実装する...これを検討してください。
ユキ

@OtávioDéciosystem.diagnosticsを追加して、カスタム.configファイルでトレースを有効にできますか?
FaizanHussainRabbani 2016

@FaizanRabbaniはカスタムトレースについては不明ですが、msdn.microsoft.com / en-us / library / ms733025(v = vs.110).aspxによると、構成ファイルに診断を追加できるはずです。
のOtavioDécio

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.