使C#控制台应用程序识别.exe.config文件中手动编辑的更改

使C#控制台应用程序识别.exe.config文件中手动编辑的更改,c#,console,config,edit,C#,Console,Config,Edit,我成功地编写了一个C#console应用程序,它从不同的位置收集.XML或.ZIP文件,并将它们复制到单个目标。这些位置作为用户范围的设置存储在设置中(例如,“Folder01 C:\Data1\”和“Folder02:\Data2”)。您可能已经知道,构建项目会在/bin/Debug文件夹中生成一个[ProjectName].exe.config文件 现在的问题是,我无法让console应用程序识别我在.exe.config文件中所做的任何更改。比方说,如果我想将文件夹03 C:\Data3\

我成功地编写了一个C#console应用程序,它从不同的位置收集
.XML
.ZIP
文件,并将它们复制到单个目标。这些位置作为用户范围的设置存储在设置中(例如,
“Folder01 C:\Data1\”
“Folder02:\Data2”
)。您可能已经知道,构建项目会在
/bin/Debug
文件夹中生成一个
[ProjectName].exe.config
文件

现在的问题是,我无法让console应用程序识别我在
.exe.config
文件中所做的任何更改。比方说,如果我想将文件夹03 C:\Data3\添加到设置中,或者编辑文件夹03 C:\Data2\路径到文件夹C:\DataEdited\\,控制台应用程序仍将循环执行代码中最初设置的设置(“Folder01 C:\Data1\”和“Folder02 C:\Data2\”)

我还注意到,即使删除了
.exe.config
文件,console应用程序仍在运行,就好像它根本不依赖该文件一样。我希望在不必在Visual Studio中打开项目并在本地进行编辑的情况下进行更改

可能吗

编辑:

为了响应我创建的设置请求和获取文件夹路径的代码,请参见下图:

代码如下:

string[] acceptedExtensions = new[] { ".xml", ".zip" };
string[] settingsToSkip = new[] { "RootFolder", "ArchiveFolder" };

// Collect data
var filteredSettings = Properties.Settings.Default.Properties
    .Cast<SettingsProperty>()
    .Where(p => !settingsToSkip.Contains(p.Name));
string[]acceptedExtensions=new[]{.xml',.zip};
string[]settingsToSkip=new[]{“RootFolder”、“ArchiveFolder”};
//收集数据
var filteredSettings=Properties.Settings.Default.Properties
.Cast()
.Where(p=>!settingsToSkip.Contains(p.Name));

filteredSettings收集Folder01、Folder02、Folder03和Folder04,我循环查找这些文件以查找具有可接受扩展名的文件。

我相信您期待c#ConfigurationManager的此功能。应用程序启动后,您可能已删除*.exe.config.*。除非调用configurationmanager.refreshsection()方法,否则在应用程序启动后,exe.config不会被锁定或需要


竖起大拇指,如果它对你有帮助,就做标记

我在我的制作代码中是如何做到这一点的,我用我的Visual Studio将其添加到我的
App.config
,并使其具有以下格式:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
        <add key="AConnection" value="127.0.0.1"/>
        <add key="Folder01" value="L:\Path\To\A\Thing"/>
        <add key="Folder02" value="L:\Path\To\ASecond\Thing"/>
        <add key="Folder03" value="L:\Path\To\AThird\Thing"/>
        <add key="Folder04" value="L:\Path\To\AFourth\Thing"/>
  </appSettings>
</configuration>

当你的应用程序无法识别配置文件时,你如何运行它?从VisualStudio启动它可能会更改其工作文件夹,以便从其他地方读取设置文件。此外,visual studio可能会在每次启动时从解决方案目录复制app.config文件,从而覆盖所有更改。听起来您可能希望以不同的方式存储目标设置,例如XML文件、数据库etc@HirasawaYui是的,我怀疑控制台应用程序正在从其他地方读取设置文件,但在哪里?实际上,我将.exe和.exe.config文件复制到另一个单元上的同一位置,然后运行.exe文件从app.config aka.exe.config文件中设置的位置收集ZIP/XML文件。它按预期运行,但当我打开.exe.config文件添加新位置以从中收集ZIP/XML文件时,.exe文件无法识别更改。它仍然像最初一样运行。Reference:--在代码中使用
.exe.config
以及
ConfigurationManager
可能会更轻松。我可以提供一个关于如何实现此功能的答案(如果需要),用户设置当然是为每个用户独立存储的,而不是存储在主应用程序配置文件中。请看@RipHamilton,您是否花了一分钟时间尝试上述解决方案?谢谢您的输入。我尝试了ConfigurationManager.RefreshSection(“用户设置”),但它不起作用。您的输入是答案的一部分。我给你竖起大拇指。谢谢!:)我知道你在这里干什么。因此,如果我走这条路线,然后在检索文件夹路径之前添加ConfigurationManager.RefreshSection(“appSettings”)行刷新.exe.config,也许我会有好运?我会随时通知你的。谢谢!:)成功了!非常感谢你!我将您的输入作为答案。:)@eddylepatio很高兴我能帮上忙!快乐编码!
string conStr = ConfiurationManager.AppSettings["AConnection"];
string strFolder1 = ConfigurationManager.AppSettings["Folder01"];
string strFolder2 = ConfigurationManager.AppSettings["Folder02"];
string strFolder3 = ConfigurationManager.AppSettings["Folder03"];
string strFolder4 = ConfigurationManager.AppSettings["Folder04"];