37

プロジェクトに複数のapp.config(それぞれ異なる名前)ファイルを追加し、ビルドごとに出力ディレクトリにコピーするように設定しました。

これを使用して、各ファイルの内容にアクセスしようとします。

System.Configuration.Configuration o = ConfigurationManager.OpenExeConfiguration(@"app1.config");

コードは実行されますが、o.HasFileはFalseになり、o.FilePathは「app1.config.config」になります。コードに変更した場合:

System.Configuration.Configuration o = ConfigurationManager.OpenExeConfiguration(@"app1");

次に、「構成ファイルのロード中にエラーが発生しました:パラメーター'exePath'が無効です。パラメーター名:exePath」というコードが爆破されます。

構成ファイルをコピーして貼り付けると(最終的にapp1.configとapp1.config.configになります)、コードは正常に実行されますが、これは適切な解決策ではないと思います。したがって、私の質問は、ConfigurationManager.OpenExeConfigurationを使用して構成ファイルを正しくロードするにはどうすればよいですか?

4

4 に答える 4

61

この解決策をどこで見つけたか思い出せませんが、特定のexe構成ファイルをロードする方法は次のとおりです。

ExeConfigurationFileMap map = new ExeConfigurationFileMap { ExeConfigFilename = "EXECONFIG_PATH" };
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
于 2012-09-25T16:21:03.170 に答える
23

http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/3943ec30-8be5-4f12-9667-3b812f711fc9によると 、パラメーターはexeの場所であり、メソッドは構成を探しますそのexeに対応します(exePathのパラメーター名は今では意味があると思います!)。

于 2009-07-05T12:17:17.600 に答える
9

この問題を完全に回避するには、構成ファイルを XML ファイルとして読み込むことができます。次に例を示します。

using System.Xml;
using System.Xml.XPath;    

XmlDocument doc = new XmlDocument();
doc.Load(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\..\\..\\..\\MyWebProject\\web.config");
string value = doc.DocumentElement.SelectSingleNode("/configuration/appSettings/add[@key='MyKeyName']").Attributes["value"].Value;
于 2011-03-14T23:01:58.520 に答える
2
using System.Reflection;

try
{
    Uri UriAssemblyFolder = new Uri(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase));
    string appPath = UriAssemblyFolder.LocalPath;

    //Open the configuration file and retrieve 
    //the connectionStrings section.
    Configuration config = ConfigurationManager.
        OpenExeConfiguration(appPath + @"\" + exeConfigName);

    ConnectionStringsSection section =
        config.GetSection("connectionStrings")
        as ConnectionStringsSection;
}

少なくとも、これは、コンソール/GUI アプリの connectionStrings セクションを暗号化および復号化するときに使用する方法です。exeConfigName.exe を含む実行可能ファイルの名前です。

于 2012-01-30T16:23:04.767 に答える