app.config – 如何在运行时强制从文件加载?

我创建了一个命令行应用程序,并将其大量配置移动到标准设置文件中。 所有设置都声明为Scope = Application,因为在应用程序中没有任何特定于用户的逻辑。 我在整个代码中访问值

Properties.Settings.Default. 

这很好用,因为它按计划自动运行。 更新配置文件中的值将反映在输出中。
一段时间后,我创建了一个基本的GUI(在同一名称空间中)直接启动命令行应用程序(通过单独的构造函数)。 我没有做过大量的.Net编程,但我基本上都在使用我的CLI应用程序,就像一个DLL(我不知道是否有适当的术语;在我的输出文件夹中,我只需要GUI。 exe,CLI.exe和CLI.exe.config,它的工作原理)。 但是,我注意到,以这种方式启动时,未加载CLI.exe.config文件; CLI应用程序仅使用其已编译的默认值。 我希望配置文件方法在这个实例中可以工作。
我尝试了以下方法来强制加载配置文件,但到目前为止已经绘制了一个空白:

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不会更新。 有没有办法在这里完成我需要的东西?

编辑:这是我的CLI.exe.config文件的示例,如果它有助于说明我在这里要完成的任务:

     
https://cloud.mycompany.com/ /inventory.aspx#view/Invoice/ ...

我还要提一下,我在上面的代码中也试过’applicationSettings’代替’appSettings’。

确保访问修饰符已设置为公共。 如果由GUI.EXE触发,则使用’GetExecutingAssembly’启动将不会加载CLI配置,因为这是执行程序集。 看看这个:

访问exe的应用程序配置

具有运行时设置的实际config文件将取决于应用程序的入口点。

如果直接启动CLI.exe ,它将使用用户本地应用程序数据文件夹内子文件夹内的用户设置文件,类似于:

 AppData\Local\CLI\CLI.exe\1.2.3.4\user.config 

但是,如果您使用引用GUI.exe的其他入口点( CLI.exe ),则对Properties.Settings所有调用都将使用完全不同的user.config实例(位于(类似)):

 AppData\Local\GUI\GUI.exe\1.2.3.4\user.config 

放置在可执行文件旁边的输出文件夹中的应用程序范围的设置文件( .exe.config )仅提供这些用户设置或只读应用程序设置的默认设置。 允许应用程序写入此文件意味着它将具有对Program FilesProgram Files夹的写入权限,这在没有提升权限的情况下是不可能的。

更改入口点时获取相同用户设置的最简单方法是将user.config文件从CLI应用程序数据文件夹复制到新入口点的相应文件夹中。

(更新应用设置)

对于应用程序设置(即输出文件夹中的.config文件),它的工作方式相同。 如果你原来有:

      
Some CLI user setting Some CLI app setting

你的GUI.exe.config是:

     
Some GUI user setting Some GUI app setting

然后,生成的.config文件应包含所有部分:

     
Some GUI user setting Some CLI user setting Some gui app setting Some CLI app setting

(在写这篇文章时,我可能会混淆一些值,但你明白了)。

还有一个我通过Google搜索找到的工具: CodeProject上的XmlConfigMerge – 我没有尝试过,但可能它会自动执行相同的操作,因此您可能需要检查它并将其包含在构建脚本中。