了解.Net配置选项

Nij*_*Nij 5 .net c# configuration

我对.Net v2中dll,ASP.net网站等的.Net配置的各种配置选项感到困惑 - 尤其是在考虑配置文件在链接的UI /最终用户端的影响时.

因此,例如,我使用的一些应用程序使用我们访问的设置:

string blah = AppLib.Properties.Settings.Default.TemplatePath;
Run Code Online (Sandbox Code Playgroud)

现在,这个选项似乎很酷,因为成员是强力键入的,我将无法输入Visual Studio 2005 IDE中不存在的属性名称.我们在命令行可执行项目的App.Config中得到这样的行:

<connectionStrings>
    <add name="AppConnectionString" connectionString="XXXX" />
    <add name="AppLib.Properties.Settings.AppConnectionString" connectionString="XXXX" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)

(如果我们没有第二个设置,那么将一个调试dll发布到live box的人可能已经嵌入了调试连接字符串 - eek)

我们也有像这样访问的设置:

string blah = System.Configuration.ConfigurationManager.AppSettings["TemplatePath_PDF"];
Run Code Online (Sandbox Code Playgroud)

现在,这些看起来很酷,因为我们可以从dll代码或exe/aspx代码访问设置,我们在Web或App.config中需要的只是:

<appSettings>
   <add key="TemplatePath_PDF" value="xxx"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)

但是,当然可能没有在配置文件中设置值,或者字符串名称可能输入错误,因此我们遇到了一组不同的问题.

所以......如果我的理解是正确的,那么前面的方法会给出强大的输入,但是在dll和其他项目之间分配不好的值.后者提供更好的共享,但键入较弱.

我觉得我必须遗漏一些东西.目前,我甚至不关心应用程序能够将值写回配置文件,加密或类似的东西.此外,我已经决定存储任何非连接字符串的最佳方法是在数据库中...然后我要做的另一件事就是在数据库连接问题时将电话号码存储给文本人员,所以他们必须存放在DB外面!

Rob*_*ray 2

Nij,我们思维的差异来自于我们的视角不同。我正在考虑开发主要使用 WinForms 客户端的企业应用程序。在本例中,业务逻辑包含在应用程序服务器上。每个客户端都需要知道要拨打的电话号码,但是如果该电话号码发生更改,将其放入每个客户端的 App.config 中就会出现问题。在这种情况下,将应用程序配置信息(或应用程序范围的设置)存储在数据库中并让每个客户端从那里读取设置似乎是显而易见的。

另一种 .NET 方式(我进行区分是因为在 .NET 出现之前,我们将应用程序设置存储在数据库表中)是将应用程序设置存储在 app.config 文件中,并通过生成的 Settings 类的方式进行访问。

我离题了。你的情况听起来不一样。如果所有不同的应用程序都在同一服务器上,您可以将设置放在更高级别的 web.config 中。但是,如果不是,您也可以拥有一个单独的“配置服务”,所有三个应用程序都可以通过该服务来获取其共享设置。至少在此解决方案中,您不会在三个位置复制代码,从而在添加设置时增加潜在的维护问题。不过听起来有点过度设计。

我个人偏好是使用强类型设置。实际上,我根据数据库中的设置表生成了自己的强类型设置类。这样我就可以两全其美。对我的设置和存储在数据库中的设置进行智能感知(注意:这是在没有应用程序服务器的情况下)。

我也有兴趣了解其他人的策略:)