使.NET配置环境中立

时间:2009-11-04 22:46:17

标签: .net deployment configuration jndi packaging

我希望对围绕使.NET应用程序配置环境中立的最佳实践有所了解。

背景。有些背景知识。我来自Java世界,而不是.NET世界,而在Java中,我们可以做一些事情来构建环境中立的包。它们通常基于以某种方式抽象配置。以下是一些例子:

  • JNDI允许应用程序按名称引用企业资源(例如,数据库,JavaMail会话,JCR存储库等),然后根据环境(dev,test,prod)将名称映射到特定配置。 / LI>
  • 另一个例子是属性文件。您可能有一堆属性(例如,“encryption_key”,“smtp.server.url”,“admin.email”等),应用程序启动时应用程序从已知位置的属性文件中获取该属性。属性键将根据环境映射到不同的值。
  • 一些应用程序开发框架(如Spring)知道如何提取属性文件,以便可以将属性与框架配置集成。

我在Java中看到的另一种方法是构建时方法,您可以使用Ant(令牌替换)或Maven(构建配置文件)来构建特定于环境的包。我不喜欢这种方法,因为我非常喜欢部署完全相同的软件包来测试和生产。但这是我见过的一种方法。

期望的解决方案。我假设在.NET中有一些类似的策略可以将配置(以及扩展包含的包)与其环境分离。

理想情况下,我想要一个解决方案,允许我保持与应用程序密切相关的非环境配置,只将环境内容外部化。回到Java示例,很多时候“配置”实际上是开发人员控制的东西,例如包括用于页面装饰的Sitemesh servlet过滤器,依赖注入或应用程序连接,映射这样的MVC控制器方法请求URI,等等。我不想被外部化。但加密密钥,数据库连接字符串,日志级别等等,是的。

1 个答案:

答案 0 :(得分:4)

默认情况下,.NET可执行文件和Web应用程序实现.config文件,它们完全按照您的描述进行操作。有一个完整的命名空间System.Configuration处理.config文件。

在App.config和Web.config上查找参考资料。 App.config是可执行文件的默认配置文件的通用术语,名为foo.exe.config,其中foo.exe是可执行文件的名称。 Web.config适用于Web应用程序。

This seems to be a decent primer on App.config.