.NET:缺少必需的配置设置时抛出哪个异常?

标签 .net exception configuration

这是一个标准场景:

if(string.IsNullOrEmpty(Configuration.AppSettings["foobar"]))
   throw new SomeStandardException("Application not configured correctly, bozo.");

问题是,我不完全确定异常SomeStandardException应该是什么。

我仔细研究了 3.5 框架,发现了两个可能的候选者:ConfigurationExceptionConfigurationErrorsException .

System.Configuration.ConfigurationException

The exception that is thrown when a configuration system error has occurred.

Remarks

The ConfigurationException exception is thrown if the application attempts to read or write data to the configuration file but is unsuccessful. Some possible reasons for this can include malformed XML in the configuration file, file permission issues, and configuration properties with values that are not valid.

Note:

The ConfigurationException object is maintained for backward compatibility. The ConfigurationErrorsException object replaces it for the configuration system.

这个异常实际上听起来很适合我的需要,但它已被标记为过时,所以,ixnay on atthay。

这给我们带来了彻底令人费解的ConfigurationErrorsException :

System.Configuration.ConfigurationErrorsException

The current value is not one of the EnableSessionState values.

正如你所看到的,它的文档完全没有用。 (本地和在线帮助都是这样。)对类(class)本身的检查表明,它对于我想要的东西来说是严重的过度杀伤力。

简而言之,我需要一个标准异常,当应用程序配置设置丢失或包含无效值时应该抛出该异常。您可能会认为框架中包含了这样一个异常供应用程序使用。 (显然确实如此,但它被标记为过时,并被范围更大的东西所取代。)

你们为此使用了什么解决方案(如果有的话),我是否必须忍受它并为此推出自己的异常(exception)?

编辑附录

有些人问我是否可以提供默认值,然后继续。在某些情况下,是的,并且在这些情况下,不会抛出异常。但是,对于某些设置,这不适用。例如:数据库服务器名称和凭据、身份验证服务器以及已安装的第三方应用程序的路径。

还值得注意的是,我主要处理的应用程序是一个以批处理模式运行的控制台应用程序,我希望它抛出一个由 main 方法捕获的异常,并在没有异常的情况下适当记录该异常适当配置。 (这是我继承的遗留代码,目前假设一切都很顺利。)

最佳答案

就我个人而言,我会使用 InvalidOperationException ,因为这是对象状态的问题,而不是配置系统的问题。毕竟,您难道不应该允许通过代码设置这些设置而不是通过配置吗?这里重要的部分不是 app.config 中没有行,而是不存在所需的信息。

对我来说,ConfigurationException(及其替代品 ConfigurationErrorsException - 尽管 MSDN 文档具有误导性)是针对配置的保存、读取等错误。

关于.NET:缺少必需的配置设置时抛出哪个异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/417187/

相关文章:

python - 在 Python for ... 循环中测试空迭代器

java - 如何在文件中存储 java.util.prefs.Preferences?

c# - 如何以编程方式将 wcf 绑定(bind)部分添加到 web.config

c# - 框架代码 : Fail silently or throw exceptions

.net - 考虑到开发人员的时间对 GetHashCode 进行单元测试

c# - 奇怪的 .Net 序列化问题

c# - 如何用嵌入的引号字符串拆分逗号分隔的字符串?

c++ - C++ 可以消除异常对象类型的歧义吗?

java - 为什么不能处理这个异常呢?

c# - 用于编辑 C# 应用程序配置文件的通用用户界面