使 C# 控制台应用程序识别 .exe.config 文件中手动编辑的更改
Make C# Console App recognize manually edited changes in .exe.config file
我成功编写了一个 C# 控制台应用程序,该应用程序从不同位置收集 .XML
或 .ZIP
文件并将它们复制到一个目的地。这些位置作为用户范围的设置存储在设置中(例如,"Folder01 C:\Data1\"
和 "Folder02:\Data2"
)。您可能已经知道,构建项目会在 /bin/Debug
文件夹中生成一个 [ProjectName].exe.config
文件。
现在,问题是我无法让控制台应用程序识别我在 .exe.config
文件中所做的任何更改。比如说,我想将 "Folder 03 C:\Data3\"
添加到设置或编辑 "Folder02"
到 "C:\DataEdited\"
的路径,控制台应用程序仍将循环遍历代码中最初设置的设置("Folder01 C:\Data1\" 和 "Folder02 C:\Data2\")。
我还注意到控制台应用程序即使在删除 .exe.config
文件后仍然运行,就好像它根本不依赖该文件一样。我想进行更改而不必在 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));
filteredSettings 收集 Folder01、Folder02、Folder03 和 Folder04,然后我遍历这些以查找具有 acceptedExtensions[ 的文件=45=].
我相信你期待 c# ConfigurationManager 的这个特性。您可能在应用程序启动后删除了 *.exe.config。 *.exe.config 在应用程序启动后不会被锁定或需要,除非您调用 configurationmanager.refreshsection() 方法。
Reloading configuration without restarting application using ConfigurationManager.RefreshSection
如果对您有帮助,请点个赞!
我是如何在我的生产代码中完成它的,我已经用我的 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"];
我成功编写了一个 C# 控制台应用程序,该应用程序从不同位置收集 .XML
或 .ZIP
文件并将它们复制到一个目的地。这些位置作为用户范围的设置存储在设置中(例如,"Folder01 C:\Data1\"
和 "Folder02:\Data2"
)。您可能已经知道,构建项目会在 /bin/Debug
文件夹中生成一个 [ProjectName].exe.config
文件。
现在,问题是我无法让控制台应用程序识别我在 .exe.config
文件中所做的任何更改。比如说,我想将 "Folder 03 C:\Data3\"
添加到设置或编辑 "Folder02"
到 "C:\DataEdited\"
的路径,控制台应用程序仍将循环遍历代码中最初设置的设置("Folder01 C:\Data1\" 和 "Folder02 C:\Data2\")。
我还注意到控制台应用程序即使在删除 .exe.config
文件后仍然运行,就好像它根本不依赖该文件一样。我想进行更改而不必在 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));
filteredSettings 收集 Folder01、Folder02、Folder03 和 Folder04,然后我遍历这些以查找具有 acceptedExtensions[ 的文件=45=].
我相信你期待 c# ConfigurationManager 的这个特性。您可能在应用程序启动后删除了 *.exe.config。 *.exe.config 在应用程序启动后不会被锁定或需要,除非您调用 configurationmanager.refreshsection() 方法。
Reloading configuration without restarting application using ConfigurationManager.RefreshSection
如果对您有帮助,请点个赞!
我是如何在我的生产代码中完成它的,我已经用我的 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"];