如何在使用“设置”时判断exe.config是否具有无效值

本文关键字:是否 config exe 无效 判断 设置 | 更新日期: 2023-09-27 18:22:18

所以我在当前正在使用的Windows服务上使用Settings.settings,它可以很好地满足我的需求。到目前为止,我遇到的唯一问题是处理无效值的方式。据我所知,如果我编辑exe.config文件并在其中一个属性中键入无效值,将使用设计时捕获的默认值。

如果你无论如何都想保持服务的运行,这一切都很好,但我需要一种方法来找到它,这样我就可以通知用户,防止他花几个小时试图弄清楚为什么即使没有报告错误,服务也没有按预期工作。

在使用设置时,是否有方法检查exe.config文件中的所有属性都具有有效值?我一直找不到。

如何在使用“设置”时判断exe.config是否具有无效值

您可以使用SettingsLoaded事件。打开Settings.cs文件,并在构造函数中附加SettingsLoaded。像这样:

// This class allows you to handle specific events on the settings class:
//  The SettingChanging event is raised before a setting's value is changed.
//  The PropertyChanged event is raised after a setting's value is changed.
//  The SettingsLoaded event is raised after the setting values are loaded.
//  The SettingsSaving event is raised before the setting values are saved.
internal sealed partial class Settings {
    public Settings() {
        this.SettingsLoaded += OnSettingsLoadedEvent;
    }
    private void OnSettingsLoadedEvent(object sender, SettingsLoadedEventArgs settingsLoadedEventArgs)
    {
        if (SomeNumParam >= 100)
        {
            const string msg = "SomeNumParam is invalid! Value must be between 0 and 100";
            Console.WriteLine(msg);
            throw new ArgumentOutOfRangeException(msg);
        }
    }
}

如果你无论如何都想保持服务的运行,这一切都很好,但我需要一种方法来找到它,这样我就可以通知用户,防止他花几个小时试图弄清楚为什么即使没有报告错误,服务也没有按预期工作。

这似乎与它应该做的恰恰相反。使用无效的配置信息运行程序是没有意义的。通常,Windows服务在加载期间或需要刷新设置时需要验证设置,如果不能,则应写入事件日志,然后停止。事件日志应该写入哪些参数不正确,通常由系统管理员在错误情况下监视事件日志。

另一种选择是使用日志记录系统(例如Log4net),该系统支持多种方式来处理日志记录(数据库、邮件等)。

如果您的问题是默认值,我建议您创建无效的默认值。