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

时间:2018-12-17 16:36:02

标签: c# console config edit

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

现在,问题是我无法使控制台应用程序识别我在.exe.config文件中所做的任何更改。假设我想将"Folder 03 C:\Data3\"添加到设置中或将"Folder02"的路径编辑到"C:\DataEdited\",控制台应用程序仍将按照代码中最初设置的设置(“ Folder01 C: \ Data1 \”和“ Folder02 C:\ Data2 \”)。

我还注意到,即使删除了.exe.config文件,控制台应用程序仍然可以运行,好像它根本不依赖该文件一样。我想进行更改,而不必在Visual Studio中打开项目并在本地进行编辑。

有可能吗?

编辑:

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

See Settings here 这是代码:

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));

filteredSettings 收集 Folder01,Folder02,Folder03和Folder04 ,我循环浏览这些文件以查找具有 acceptedExtensions 的文件。

2 个答案:

答案 0 :(得分:2)

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

Reloading configuration without restarting application using ConfigurationManager.RefreshSection

https://docs.microsoft.com/en-us/dotnet/api/system.configuration.configurationmanager.refreshsection?view=netframework-4.7.2

竖起大拇指并标记它是否对您有帮助!

答案 1 :(得分:1)

我如何在生产代码中完成此操作,是因为我已将Visual Studios添加到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>

<add key="" value="">是您要命名的名称,value是正确文件的路径。


分配:

然后可以将它们分配给变量:

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"];