我需要改进 app.config 文件中的错误报告。
我有一个包含“int”类型设置的小型测试应用程序。如果我将它在 app.config 中的值更改为不是有效整数的值,我希望会引发一个我可以捕获和报告的异常。不幸的是,有些东西正在吃异常。有没有一种简单的方法来防止这种行为并让异常传播出去?
我的 Settings.Designer.cs 文件(由 Visual Studio 生成):
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute(
"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default { get { return defaultInstance; } }
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("17")]
public int SecondSetting
{
get { return ((int)(this["SecondSetting"])); }
set { this["SecondSetting"] = value; }
}
}
我的 C# 测试应用程序:
static void Main (string[] args)
{
try
{
Console.WriteLine(AppConfigTests.Properties.Settings.Default.SecondSetting);
}
catch (Exception x)
{
Console.WriteLine(x.ToString());
}
}
我的 App.config 文件的相关部分(请注意,该值不是有效的整数):
<userSettings>
<AppConfigTests.Properties.Settings>
<setting name="SecondSetting" serializeAs="String">
<value>1foo7</value>
</setting>
</AppConfigTests.Properties.Settings>
</userSettings>
System.Number.StringToNumber 抛出了 System.Format 异常,但有东西捕捉到它并将其丢弃,而我的 catch 块永远不会进入。在 Visual Studio 调试器输出中,我发现“在 mscorlib.dll 中发生了‘System.FormatException’类型的第一次机会异常”,但这对我没有帮助,除非进一步确认引发了异常。
我尝试在 Settings.Designer.cs 中将 IntegerValidatorAttribute 添加到我的设置属性,但这没有帮助(并且我确保 .cs 没有重新生成)。
我尝试在 main() 方法的顶部添加以下代码,但这也无济于事:
foreach (SettingsProperty sp in AppConfigTests.Properties.Settings.Default.Properties)
sp.ThrowOnErrorDeserializing = true;
我曾想过实现我自己的 ConfigurationSection,但我希望有一个更简单的解决方案。
重申一下:我需要一种方法来报告 app.config 文件中的设置值错误。
(如果我破坏了 App.config 中的 XML 语法(例如,通过删除尖括号),我的 catch 块会得到一个很好的异常,其中包含我可以要求的所有细节。)