Я создал приложение из командной строки и переместил много его config в стандартный файл настроек. Все настройки объявляются как Scope = Application, потому что в логике приложения нет ничего конкретного. Я получаю доступ ко всем значениям кода:app.config - Как заставить нагрузку из файла во время выполнения?
Properties.Settings.Default.<whatever>
Это работает хорошо, так как оно выполняется автоматически по расписанию. Обновление значений в файле конфигурации отражается на выходе.
Спустя некоторое время я создал базовый графический интерфейс (в том же пространстве имен), чтобы запустить приложение командной строки напрямую (через отдельный конструктор). Я не занимался огромным количеством программирования .Net, но я в основном использую свое приложение CLI, такое как DLL (я не знаю, есть ли у вас подходящий термин: в моей выходной папке мне нужен только GUI. exe, CLI.exe и CLI.exe.config, и он работает). Однако я заметил, что при запуске этого способа файл CLI.exe.config не загружается; приложение CLI использует только свои скомпилированные значения по умолчанию. Я надеялся, что в этом случае будет работать файл config.
Я попытался следующие методы, чтобы заставить загрузки файла конфигурации, но до сих пор обращается пустым:
1:
ConfigurationManager.RefreshSection("appSettings")
2:
ExeConfigurationFileMap configFile = new ExeConfigurationFileMap();
configFile.ExeConfigFilename = Path.Combine(Environment.CurrentDirectory, System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + ".exe.config");
ConfigurationManager.OpenMappedExeConfiguration(configFile, ConfigurationUserLevel.None).Save(ConfigurationSaveMod.Modified);
ConfigurationManager.RefreshSection("appSettings");
3:
Properties.Settings.Default.Reload();
Ничего из этого не вызывают ошибок, но Properties.Settings.Default.Value
У меня есть измененный в файле конфигурации не обновляется. Есть ли способ выполнить то, что мне нужно здесь?
Edit: вот пример моего файла CLI.exe.config, если это помогает проиллюстрировать то, что я пытаюсь достичь здесь:
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="CLI.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</sectionGroup>
</configSections>
<connectionStrings/>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
<applicationSettings>
<CLI.Properties.Settings>
<setting name="URLBase" serializeAs="String">
<value>https://cloud.mycompany.com/</value>
</setting>
<setting name="URLPage" serializeAs="String">
<value>/inventory.aspx#view/Invoice/</value> <!-- This is the value I'm trying to change -->
</setting>
...
Я должен также упомянуть, что я также пытался «applicationSettings 'вместо' appSettings 'в приведенном выше коде.
'ConfigurationManager.RefreshSection (" appSettings ")' работает для меня. Вы уверены, что app.config действительно обновлен? – Alexander
Пользовательские настройки в 'Properties.Settings' не должны иметь ничего общего с файлом' .config' внутри вашей выходной папки, они хранятся в папке данных локального приложения пользователя. – Groo
GUI.exe будет читать GUI.exe.config не cli.exe.config - это так просто. –