【发布时间】:2012-01-05 15:03:20
【问题描述】:
允许 ASP.NET 应用程序知道它在哪个环境中运行的推荐方法是什么?我的应用程序可以在这些环境中运行:
- 在 Visual Studio 中调试
- 自动化系统测试
- 在临时服务器上部署
- 在生产服务器上部署
在每种环境中,应用程序都需要一些不同的配置。环境之间的主要区别在于使用的数据库连接设置,但也有其他区别。
这是我尝试过的:
- 我尝试在 Visual Studio 中使用“配置”选项。默认有两个:Release 和 Debug。我试图用我的四个环境的标识符替换这两个。然后可以使用这些配置将转换应用于 Web.config 文件。这里的问题是选择配置发生在构建时,我想编译我的应用程序,然后选择环境,然后在 Web 服务器上运行它。在 Visual Studio 中调试时也不会发生 Web.config 转换,因此它不会告诉应用程序它在调试环境中运行,而是没有环境。我在Use Visual Studio web.config transform for debugging 找到了一种解决方法,但它似乎效果不佳。我必须更改项目属性中的配置,这是一个缓慢的过程。
- 我尝试过使用环境变量。这样我可以从应用程序外部设置一个变量 MYAPP_ENV=dev,我可以在 C# 中将其读取为
字符串 env = System.Environment.GetEnvironmentVariable("MYAPP_ENV");
但是我不确定如何在 Visual Studio 和 IIS 中设置这个环境变量。我无法在机器上全局设置它,因为同一台机器需要能够在多个环境中运行应用程序。
那么,在 ASP.NET 中推荐的方法是什么?在 Ruby on Rails 中,我将使用 RAILS_ENV 环境变量,在 PHP 中,我将包含一个文件,该文件未检入存储库并添加到版本控制系统的忽略列表中。
【问题讨论】:
-
不清楚您是否正在这样做,但我会尽量避免使用编写环境特定代码(即
if env=="dev" { } else { },因为那样您的站点在不同环境中的行为会有所不同。任何需要更改的值应该在配置文件中更改(请参阅 AaronS 答案)。
标签: c# asp.net .net web-config environment