默认情况下,.NET应用程序的配置文件以“exe文件名”.config命名。我想知道是否可以动态指定一个应用程序的配置。
例如,构建的应用程序是“foo.exe”。在运行时,配置文件是“foo.exe.config”。是否可以让它接受命令行参数来使用其他配置文件。因此,应用程序可以使用如下的其他配置。
foo.exe /config:bar.config
bar.config用作foo.exe.config的配置文件。
答案 0 :(得分:11)
如果您只需要替换AppSettings部分,上述所有工作都可以正常工作。
如果您必须使用不同的配置文件(所有部分)运行,您可能需要考虑使用主机启动应用程序,为主应用程序创建应用程序域,并根据您传入的参数设置不同的配置文件。
以下代码对我有用:
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationBase = "file://" + System.Environment.CurrentDirectory;
setup.DisallowBindingRedirects = true;
setup.DisallowCodeDownload = true;
if (args.Length != 0 && args[0].Equals("-test"))
{
setup.ConfigurationFile = "PATH_TO_YOUR_TEST_CONFIG_FILE";
}
else {
setup.ConfigurationFile = "PATH_TO_YOUR_LIVE_CONFIG_FILE";
}
AppDomain domain = AppDomain.CreateDomain("FRIENDLY_NAME", null, setup);
domain.ExecuteAssembly("YourMainApp.exe");
答案 1 :(得分:4)
来自MSDN的代码
static void DisplayMappedExeConfigurationFileSections()
{
// Get the application configuration file path.
string exeFilePath = System.IO.Path.Combine(
Environment.CurrentDirectory, "ConfigurationManager.exe.config");
// HERE !!!
// Map to the application configuration file.
ExeConfigurationFileMap configFile = new ExeConfigurationFileMap();
configFile.ExeConfigFilename = exeFilePath;
Configuration config =
ConfigurationManager.OpenMappedExeConfiguration(configFile,
ConfigurationUserLevel.None);
// Display the configuration file sections.
ConfigurationSectionCollection sections = config.Sections;
Console.WriteLine();
Console.WriteLine("Sections in machine.config:");
// Loop to get the sections machine.config.
foreach (ConfigurationSection section in sections)
{
string name = section.SectionInformation.Name;
Console.WriteLine("Name: {0}", name);
}
}
答案 2 :(得分:3)
来自How to use Configuration.GetSection() and ConfigurationManager.OpenMappedExeConfiguration()
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = @"C:\Inetpub\Test\Config\Dev.config";
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
AppSettingsSection section = (AppSettingsSection)config.GetSection("appSettings");
string ConfigVersion = section.Settings["ConfigVersion"].Value;
答案 3 :(得分:0)
是的,你需要使用ExeConfigurationFileMap