ConfigurationSettings与Properties.Settings

时间:2010-11-03 14:29:27

标签: c# .net sql configuration settings

我有一个Winform应用程序,其中有16个SQL连接,当前存储在DAL项目Settings.settings中。

我正在尝试编写一个“Manager”类来简化此操作( like here)。但是,我在网上找到的大多数示例似乎都使用ConfigurationSettings.AppSettings["something"]。虽然,我正在使用Properties.Settings.Default.something

有人可以解释哪些被认为是正确的以及桌面应用程序的原因?

4 个答案:

答案 0 :(得分:4)

我认为正确的方法是使用app.config文件并将它们存储在connectionStrings部分中?

然后您可以访问它们,如:

 ConfigurationManager.ConnectionStrings["something"].ConnectionString

如果那太“丑陋”,你可以轻松地写一个包装。

public class ConnectionManager
{
    public string Something
    {
        get
        {
             // TODO: check to make sure the configuration exists and throw an exception perhaps
             return ConfigurationManager.ConnectionStrings["something"].ConnectionString;
        }
    }
}

哎呀......正如所指出的,我的意思是做ConfigurationManager而不是ConfigurationSettings。

答案 1 :(得分:3)

我们更喜欢使用Properties.Settings(又名.settings.settings),因为它是强类型的。不要尝试在同一配置文件中执行具有不同环境(dev / prod)的花哨技巧。每个环境都有一个单独的配置文件,并在部署它们时重命名配置要容易得多。即。

app.config 
app.stage.config
app.test.config
app.prod.config

我们使用PowerShell脚本(类固醇上的批处理文件)来进行部署。我将简化我们作为传统批处理文件所做的工作 - (伪代码/未经测试的样本):

@echo off
:: %1 is the environment name (first parameter)
setlocal
set source=c:\tfs\project\bin\release\
set target=\\server\share\path\

xcopy /s/e %source% %target%

:: Using a copy command to rename/overwrite the env specific version
if exists %target%\app.%1.config copy /y %target%\app.%1.config %target%\app.config

答案 2 :(得分:2)

我从未成为将sql连接字符串放入软件配置文件的忠实粉丝。用户习惯于出于好奇或愚蠢(或两者的某种组合)来搞砸他们。我喜欢将我的所有连接字符串(开发,模型,生产等)放入我的数据访问库的属性中,并在其中包含一个ConfigurationSettings类,我用它来根据消耗设置的某些属性来访问它们应用程序:

public class ConfigurationSettings
{

    public static string MyConnectionString
    {
    get
            if(ConfigurationSettings.TestMode)
                return Properties.Settings.Default.MyConnectionStringTest;
            else
                return Properties.Settings.Default.MyConnectionStringProd;
    }
    }

    // I typically only have test and not-test. This could
    // easily be some other combination of values to satisfy
    // multiple environments.
    public static bool TestMode { get; private set;}
}

这允许我通过公共名称调用此类的静态属性,并根据某些条件提供所有可用的连接字符串。这会使您的特定数据集,实体,您正在使用的任何数据模型处于担心连接字符串的业务中,并且可以将设置编译为.dll(并且不再需要担心它们)。也可以修改此方法,以类似的方法从app.config(我为ASP.Net站点执行)中提取设置。

更新:你所暗示的确没有“正确”的方式。 app.config旨在保存可修改的配置设置,而无需重建应用程序。属性设置旨在保存不可修改的设置。所以两者都完全有效。可能最“正确”的方式对于您的应用程序和开发团队来说都是有意义的。

答案 3 :(得分:1)

Properties.Settings.Default通常用于保存应用程序内部状态,如背景颜色,以记住用户设置。

ConfigurationSettings实际上是您正在讨论的“Manager”类,可以从app.config文件访问其他自定义设置集,包括连接字符串。