使C#控制台应用程序识别.exe.config文件中手动编辑的更改
我成功地编写了一个C#console应用程序,它从不同的位置收集使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\
.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"];