【发布时间】:2013-12-13 03:38:11
【问题描述】:
我正在编写一个 csharp 控制台应用程序。根据用户输入,我想在运行时更新我的 app.config 文件。
每次我需要用另一个字符串替换一个字符串。
如果用户选择了开发环境,我需要将所有出现的测试环境替换为开发环境。
请建议如何在运行时执行此操作。
【问题讨论】:
-
更改配置的代码肯定是倒退的吗?或者将不同的配置部署到不同的环境。
标签: c# app-config
我正在编写一个 csharp 控制台应用程序。根据用户输入,我想在运行时更新我的 app.config 文件。
每次我需要用另一个字符串替换一个字符串。
如果用户选择了开发环境,我需要将所有出现的测试环境替换为开发环境。
请建议如何在运行时执行此操作。
【问题讨论】:
标签: c# app-config
你不这样做。别。曾经。使用用户设置或想出你自己的东西。不允许用户空间应用程序写入Program Files 文件夹。不要。
您可以创建一个用户设置来存储用户选择的环境类型。概括所有应用程序设置,以便它们包含一个占位符,涵盖您需要在开发/测试之间更改的部分并在代码中替换该部分。
示例:为应该是特定于环境的日志文件创建设置。此设置的值可能是
"[Environment]\MyProgram\Logs"
然后,在您的代码中,您将使用类似这样的东西来创建真实路径:
string logPath = Properties.Settings.Default.LogPath.Replace("[Environment]", IsDevEnvironment ? "C:\\DevEnvironment\\Test", "C:\\TestEnvironment");
当然,您会在此处填写实际值。请注意,它们也可以来自应用程序或用户设置。
【讨论】:
在一般情况下,在运行时更改配置值不是一个好习惯。
但是,如果需要并且没有任何其他方法可以克服这种情况,那么您可以更新 App.Config 文件:
以下是更新AppSettings值的代码示例:
var config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
if (config.AppSettings == null || config.AppSettings.Settings == null)
{
return;
}
config.AppSettings.Settings["Key"].Value = "My Value";
config.Save(ConfigurationSaveMode.Modified, true);
ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name);
建议:建议创建xml或文本文件并将其存储在AppData中。下次需要时,您可以从该文件中获取数据。
This 显示如何在 AppData 文件夹中写入文件。
【讨论】: