下面是一个标准的场景:
if(string.IsNullOrEmpty(Configuration.AppSettings["foobar"]))
throw new SomeStandardException("Application not configured correctly, bozo.");
问题是,我不完全肯定 哪个异常 SomeStandardException
应该是。
我仔细阅读了3.5框架,发现了两个可能的候选框架: ConfigurationException
和 ConfigurationErrorsException
。
系统。配置。配置异常
时引发的异常 配置系统错误 发生了。
备注
ConfigurationException
异常是 如果应用程序试图 读取或写入数据到 配置文件,但是 一些可能的原因 中包含格式不正确的 XML 配置文件 权限问题和配置 属性的值不是 有效。注:
ConfigurationException
对象是 向下兼容。ConfigurationErrorsException
对象将其替换为 配置系统。
这个异常听起来非常适合我的需要,但它已经被标记为过时了,所以,不要再提了。
这就把我们带到了完全令人费解的 ConfigurationErrorsException
:
System.ConfigurationErrorsException
当前值不是 EnableSessionState 值。
如您所见,它的文档完全没用。(在本地和在线帮助中都是这样。)对这门课本身的检查表明,它对于我想要的东西来说过于夸张了。
简而言之,我需要一个标准异常,当应用程序配置设置丢失或包含无效值时,应该引发该异常。您可能会认为框架中包含了这样一个异常,以供应用程序使用。(显然是这样的,但它被标记为过时的,并被范围更大的 很多所取代。)
如果有的话,你们有什么解决方案吗? 我是不是应该忍耐一下,然后为这个问题卷起我自己的异常?
有些人问我是否可以提供一个默认值,然后继续。在某些情况下,是的,在这些情况下,不会引发异常。但是,对于某些设置,这不适用。例如: 数据库服务器名称和凭据、身份验证服务器以及安装的第三方应用程序的路径。
同样值得注意的是,我主要处理的应用程序是一个在批处理模式下运行的控制台应用,我希望它抛出一个由 main 方法捕获的异常,如果没有正确配置该异常,它会被正确地记录。(这是我继承的遗留代码,目前只有 假设,一切都很好。)