我对 .Net v2 中 dll、ASP.net 网站等的 .Net 配置的各种配置选项感到非常困惑——尤其是考虑到配置文件在链的 UI/最终用户端的影响时。
因此,例如,我使用的一些应用程序使用我们访问的设置:
string blah = AppLib.Properties.Settings.Default.TemplatePath;
现在,这个选项看起来很酷,因为成员是严格键入的,而且我将无法键入 Visual Studio 2005 IDE 中不存在的属性名称。我们最终在命令行可执行项目的 App.Config 中得到这样的行:
<connectionStrings>
<add name="AppConnectionString" connectionString="XXXX" />
<add name="AppLib.Properties.Settings.AppConnectionString" connectionString="XXXX" />
</connectionStrings>
(如果我们没有第二个设置,那么有人向 live box 发布调试 dll 可能已经构建了其中嵌入的调试连接字符串 - eek)
我们还可以像这样访问设置:
string blah = System.Configuration.ConfigurationManager.AppSettings["TemplatePath_PDF"];
现在,这些看起来很酷,因为我们可以从 dll 代码或 exe / aspx 代码访问设置,而我们在 Web 或 App.config 中需要的只是:
<appSettings>
<add key="TemplatePath_PDF" value="xxx"/>
</appSettings>
但是,这个值当然可能没有在配置文件中设置,或者字符串名称可能输入错误,因此我们遇到了不同的问题。
所以......如果我的理解是正确的,前一种方法会提供强类型,但 dll 和其他项目之间的值共享很差。后者提供更好的共享,但打字较弱。
我觉得我一定是错过了什么。目前,我什至不关心应用程序能否将值写回配置文件、加密或类似的东西。此外,我已经决定存储任何非连接字符串的最佳方式是在数据库中......然后我要做的下一件事就是存储电话号码以在数据库连接问题的情况下发短信给人们,所以他们必须存储在数据库之外!