Как прочитать пользовательские настройки в app.config из приложения diff? - PullRequest
4 голосов
/ 03 декабря 2009

У меня есть WinForms .exe с App.config, в котором есть набор параметров пользовательской области, которые устанавливаются во время выполнения и сохраняются. Я хочу иметь возможность использовать приложение WinForms для изменения и сохранения настроек, а затем нажать кнопку, чтобы выполнить некоторую работу на основе этих настроек. Я также хочу прочитать пользовательские настройки в том же файле .config из sep. консольное приложение, поэтому я могу запланировать работу, которая будет выполнена как запланированная задача. Каков наилучший способ сделать это?

Обновление: Я попытался рекомендовать использовать ConfigurationManager.OpenExeConfiguration, как описано в некоторых ответах, вот так.

Configuration config = ConfigurationManager.OpenExeConfiguration("F:\\Dir\\App.exe");

но когда я пытаюсь получить пользовательские настройки, вот так.

string result = config.AppSettings.Settings["DB"].ToString();

Я получаю нулевую ссылку.

Из кода в exe, однако следующее правильно возвращает имя БД.

Properties.Settings.Default.DB

Куда я иду не так?

Обновление 2:

Таким образом, основываясь на некоторых ответах ниже, я теперь могу использовать следующее для извлечения необработанного XML из раздела файла user.config, который меня интересует из sep. ConsoleApp.

System.Configuration.ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = @"D:\PathHere\user.config";
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap,ConfigurationUserLevel.None);
System.Configuration.DefaultSection configSection = (System.Configuration.DefaultSection)config.GetSection("userSettings");
string result = configSection.SectionInformation.GetRawXml();
Console.WriteLine(result);

Но я все еще не могу просто получить значение для интересующего меня элемента.

Ответы [ 6 ]

6 голосов
/ 03 ноября 2011

это должно сделать это:

var clientSettingsSection = (System.Configuration.ClientSettingsSection)(ConfigurationManager.GetSection("userSettings/YourApplicationName.Properties.Settings"));
var setting = clientSettingsSection.Settings.Get("yourParamName_DB_");
string yourParamName_DB = ((setting.Value.ValueXml).LastChild).InnerText.ToString();
2 голосов
/ 03 декабря 2009

Вы можете использовать класс ConfigurationManager , чтобы открыть файл конфигурации другого исполняемого файла.

Configuration conf = ConfigurationManager.OpenExeConfiguration(exeFilePath);
// edit configuration settings
conf.Save();
0 голосов
/ 04 февраля 2016
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = Environment.CurrentDirectory + "\\MyApp.exe.config";
//i have config in the same directory as my another app         
System.Configuration.Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
var settingsSection = (System.Configuration.ClientSettingsSection)config.GetSection("userSettings/MyApp.Properties.Settings");
var setting = settingsSection.Settings.Get("MySetting");
var param = ((setting.Value.ValueXml).LastChild).InnerText.ToString();
0 голосов
/ 04 декабря 2009

Если вы устанавливаете эти значения для каждого пользователя, вам может потребоваться использовать метод ConfigurationManager.OpenExeConfiguration (ConfigurationUserLevel) вместо текущего метода, который вы используете сейчас.

0 голосов
/ 03 декабря 2009

См. ConfigurationManager.OpenExeConfiguration

0 голосов
/ 03 декабря 2009

Если вы знаете путь к файлу конфигурации, попробуйте:

System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration ("configPath");

string myValue = config.AppSettings.Settings ["myValue"] .Value;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...