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

我应该在自定义应用程序设置中使用C#App.config吗?,c#,config,C#,Config,我需要在配置文件中存储一些设置(连接字符串、文件夹路径) 我应该使用App.config吗 看起来很明显,但是 1) 应用程序。包含一些.NET配置文件(包、版本号等),我不希望任何人能够接触到这些文件-我宁愿将它们编译到程序中 2) 将我的开发模式配置设置编译到程序中,并在App.config丢失时调用(默认为内置资源或其他内容),感觉很奇怪 3) 我喜欢干净的配置文件,这样我可以一目了然地知道设置是什么(我有OCD)?是的,这是最好的做法,可以防止人们不得不重新编译应用程序来进行基本的配置更

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

我应该使用App.config吗

看起来很明显,但是

1) 应用程序。包含一些.NET配置文件(包、版本号等),我不希望任何人能够接触到这些文件-我宁愿将它们编译到程序中

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


3) 我喜欢干净的配置文件,这样我可以一目了然地知道设置是什么(我有OCD)?

是的,这是最好的做法,可以防止人们不得不重新编译应用程序来进行基本的配置更改:例如,新用户需要获得一封自动电子邮件,更改配置文件比重新编译和重新部署应用程序容易得多。关于配置文件问题,这里有一个优雅的解决方案:


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

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

当我do使用*.config进行某些操作时,我将通过另一个“配置”类公开这些值,该类对我希望公开的每个值都有一个静态只读属性。i、 e.如果我的应用程序配置有设置

<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.
        }
    }
公共静态类配置
{
/// 
///获取服务器启动事件之前的分钟数。
/// 
公共静态int-ServerLoadTime
{
得到
{
如果(ConfigurationManager.AppSettings[“ServerLoadTime”]!=null)
返回int.Parse(ConfigurationManager.AppSettings[“ServerLoadTime”]);
Logging.Write(“配置文件中缺少ServerLoadTime.”,EventLogEntryType.Warning,Logging.Sources.General,“Configuration.ServerLoadTime”,null);
return-30;//返回一个默认值。
}
}
}

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

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

是的,将所有内容塞进
app.config
。我的理由是,
app.config
中的任何内容都不是最终用户真正可以编辑的,即使是那些只有最终用户才知道的位(连接字符串和文件夹路径)。您想要一个不懂计算机的人用记事本编辑XML文件吗?我知道我不知道


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

谢谢,但我从不建议将这些值硬编码到程序中-选择是app.config和(比如)我自己的custom Settings.xmlapp.config是一个xml文件dude。你的解决方案只是重新发明了轮子,没有,app.config不向最终用户公开,我能想到的访问它的唯一可能方式是通过文件系统,或者某种缓冲区溢出。即便如此,在某些情况下,您无法信任您的开发伙伴,尤其是在更大的组织中,因此使用MS提供的工具进行配置混淆,我相信:。我还知道在db.App.config中存储的加密值实际上是以.exe.config的形式向用户公开的-这就是它的全部意义,因此设置可以编辑。谢谢,但我从不建议将这些值硬编码到程序中-选择是在App.config和(比如)之间my own custom Settings.xml–BrendanYou没有提到xml文件作为选项。无论哪种方式,如果我知道应用程序中的硬编码常量很少发生变化(即constdouble Pi=3.141592653;),我就不会对它们有任何问题(我知道您可以使用Math.Pi;这是一个示例)。