2012-01-05 45 views
1

允许ASP.NET应用程序知道它运行在哪个环境的建议方式是什么?我的应用程序可以在这些环境中运行:如何配置ASP.NET应用程序的环境?

  • 内的Visual Studio调试
  • 一个自动化系统测试
  • 部署一个临时服务器上
  • 部署在生产服务器上

在每这些环境应用程序需要一些不同的配置。环境之间的主要区别是使用哪个数据库连接设置,但也有其他差异。

这是我曾尝试:

  • 我一直在使用Visual Studio中的“配置”选项尝试。默认情况下有两个:发布和调试。我试图用我的四种环境中的标识替换这两个。然后可以使用这些配置将转换应用于Web.config文件。这里的问题是选择配置发生在构建时间,我想编译我的应用程序,然后在运行在Web服务器上之前选择环境。在Visual Studio内部进行调试时,Web.config转换也不会发生,所以不会告诉应用程序它在调试环境中运行,它不会得到任何环境。我在Use Visual Studio web.config transform for debugging找到了一个解决方法,但它似乎不能很好地工作。我必须更改项目属性中的配置,这是一个缓慢的过程。
  • 我试过使用环境变量。这样,我可以从应用程序外部设置变量MYAPP_ENV = dev,并且我可以在C#中将其读取为
    string env = System.Environment.GetEnvironmentVariable(“MYAPP_ENV”);
    但是我不知道如何从Visual Studio和IIS内部设置这个环境变量。我无法在机器上进行全局设置,因为同一台机器需要能够在多个环境中运行应用程序。

那么,在ASP.NET中如何推荐这样做呢?在Ruby on Rails中,我将使用RAILS_ENV环境变量,并且在PHP中,我将包含一个文件,该文件未检入存储库并添加到版本控制系统的忽略列表中。

+0

,如果你这样做,但我会尝试使用,以避免目前尚不清楚,访问这些值编写特定于环境的代码(例如'if env ==“dev”{else else {}',因为这样你的网站在不同的环境中的行为就会有所不同,任何需要改变的值都应该在配置文件中进行修改(参见AaronS答案) – Jeff 2012-01-05 15:15:51

回答

3

我会为每个环境分开web.config文件。

或者,您也可以通过添加外部配置文件来设置类似于您对PHP包含文件所做的操作。

只需将以下内容添加到您的web.config。

<appSettings file="MySettings.config"> 

然后添加一个名为MySettings.config的新文件,其中包含您的其他配置信息。

+0

+1。为了帮助维护独立的web.configs,我建议您利用[config transforms](http:/ /msdn.microsoft.com/en-us/library/dd465318.aspx)。 – Keith 2012-01-05 15:15:32

+0

AronS:这听起来很有趣。在开始调试(F5)时,如何在运行我的应用程序之前将Visual Studio设置为自动将一个值放入MySettings.config文件中?当我将它部署到生产环境中的IIS时,这个MySettings.config文件是否可以在我的应用程序的dll旁使用? Keith:正如我最初写的那样,它看起来像变换只能作为构建过程的一部分,还有其他并发症似乎使它无法有效工作。 – 2012-01-06 13:18:24

+0

你会做什么类似于你如何设置你的PHP版本。只需在每个环境中都有此文件,并让您的部署工具忽略它。 我实际上做的是在子文件夹中有多个版本的web.config,为每个环境重命名(web.config.QA,web.config.Prod等)。然后,我的构建和部署过程根据正在执行的构建选择正确的构建和部署过程,将其重命名为web.config,然后在部署站点时替换根中的构件。这对我来说真的很好。 – AaronS 2012-01-06 15:12:11

1

web.config文件用于环境配置。如果您在视觉工作室中发现配置过于繁琐,则可以将该文件放在版本控制之外,然后针对每个环境进行编辑。在<的appSettings >节点可以添加键:

<appSettings> 
    <add key="Environment" value="DEV" /> 
</appSettings> 

然后你就可以通过ConfigurationManager中类

var currentEnvironment = ConfigurationManager.AppSettings["Environment"].ToString(); 
+0

把整个web.config放在版本控制之外或者每个环境只有一个版本是没​​有什么意义的,因为有很多东西需要放在文件中,但不是真正的环境或配置相关。 – 2012-01-06 13:23:56