1

我想了解有关使 .NET 应用程序配置环境中立的最佳实践的一些想法。

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

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

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

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

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

4

1 回答 1

4

.NET 可执行文件和 Web 应用程序默认实现完全符合您描述的 .config 文件。有一个完整的命名空间 System.Configuration 用于处理 .config 文件。

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

这似乎是 App.config 的一个不错的入门。

于 2009-11-04T23:31:59.227 回答