我应该使用C#App.config进行自定义应用程序设置吗?

时间:2013-02-19 22:25:32

标签: c# config

我需要在配置文件中存储一些设置(连接字符串,文件夹路径)。

我应该使用App.config吗?

看起来很明显,但是......

1)App。包含一些.NET配置的东西(包,versiosn等),我不希望任何人能够触摸 - 我宁愿总是将这些编译到程序中。

2)将我的开发模式配置设置编译到程序中并在App.Config丢失时调用(默认为内置资源或其他内容),这感觉很奇怪。

3)我喜欢干净的配置文件,所以我可以一眼就看出设置是什么(我有OCD)?

3 个答案:

答案 0 :(得分:1)

是的,把它全部填入app.config。我的理由是,app.config中的任何内容都不会被最终用户 编辑,即使只有最终用户知道的那些位(连接字符串和文件夹路径)也是如此。你想要一个没有计算机知识的人用记事本编辑XML文件吗?我知道我没有。

将最终用户值引入app.config的唯一可靠方法是在安装过程中提示用户输入这些值,并将其自行编写为自定义操作。

答案 1 :(得分:0)

是的,这是最佳做法,并且可以防止人们重新编译您的应用程序以进行基本的配置更改:例如。新用户需要获取自动电子邮件,比重新编译和重新部署应用程序更容易更改配置文件。关于配置文件问题,这是一个优雅的解决方案:http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx

我更喜欢重命名文件,或者保留注释字符串,具体取决于我从开发到生产需要做多少工作。

答案 2 :(得分:0)

我的* .config文件规则是在我希望能够在不重新部署二进制文件的情况下更改设置时使用它们。如果我不关心要求部署进行更改,那么我将使用常量。如果我有疑问,我会使用配置文件。我几乎总是使用配置文件。

当我执行使用* .config时,我将通过另一个“Configuration”类公开这些值,该类对于我希望公开的每个值都有一个静态只读属性。即如果我的app配置有设置

<add key="ServerLoadTime" value="-30" />

然后我的配置类可能如下:

public static class Configuration
{

    /// <summary>
    /// Get the number of minutes before prior to the event that the server is started.
    /// </summary>
    public static int ServerLoadTime
    {
        get
        {
            if (ConfigurationManager.AppSettings["ServerLoadTime"] != null)
                return int.Parse(ConfigurationManager.AppSettings["ServerLoadTime"]);

            Logging.Write("ServerLoadTime is missing from the Configuration file.", EventLogEntryType.Warning, Logging.Sources.General, "Configuration.ServerLoadTime", null);
            return -30; // return a default value.
        }
    }

}

这种方法创建了一个标准化的封装,提供:

  • 一种快速引用值的方法,无需通过CM和检查有效性。
  • 处理配置错误的值/缺失值的表面。
  • 将来自配置文件的字符串转换为所需类型的位置。
  • 记录缺失值的位置,同时仍提供默认的最后手段。
  • 如果需要,可以处理将逻辑附加到结果的地方。