ASP.NET MVC和多个环境

时间:2009-12-26 22:09:22

标签: asp.net-mvc

ASP.NET MVC如何处理或提供使用多种环境创建应用程序的方法?例如:

  1. 开发环境(本地计算机,可能通过内置Web服务器运行并与本地数据库通信)
  2. 测试(使用示例数据针对预加载的数据库运行,尽管可以跳过此部分并可以使用模拟)
  3. 使用真实数据在真实服务器上生成数据库
  4. Ruby on Rails具有环境概念,如果您正在开发或生产中,则可以“自动”推断,因此您可以在配置文件中指定连接信息(连接字符串),框架会动态提取相应的信息。是否有类似的方式使用.NET MVC?如果没有那么专业开发人员如何使用.NET MVC处理不同的环境?

    我能想到的唯一方法是手动添加“环境”全局方法(或使用枚举,或类似的东西,也许这是用于状态模式的东西?)并存储不同的连接字符串在web.config文件中,然后创建一个所有数据访问类派生自的基类,它提供了获取当前环境的连接字符串的方法;然后,当应用程序生效时,必须将其设置为生产。

    还有其他方法吗?我见过的大多数.NET MVC视频和文章都不会对单独的环境感到困扰,只是使用了开发数据库而没有说明你是如何在生产环境中进行的。

6 个答案:

答案 0 :(得分:4)

Scott Hanselman在这里描述了这个问题的一个简洁的解决方案:http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx

答案 1 :(得分:2)

我认为这确实是贵公司内部流程的问题。由于每家公司都有所不同,因此很难有一种“正确”的通用方式来支持开发/测试/ alpha /生产和/或其他环境。

一种方法:创建一个安装程序,根据在安装过程中选择的环境提供正确的连接字符串。

另一种方法:系统管理员编辑web.config文件以在安装期间提供正确的连接字符串。

然而另一种方式:连接字符串存储在系统注册表中。

甚至另一种奇怪的方式:你拥有web.config中所有环境的所有连接字符串,然后在appSettings中设置告诉你使用哪一个。

根据客户的不同,我已经完成了所有这些工作。还有更多,但这些更受欢迎。

(一个客户端希望将连接字符串存储在数据库本身。真的。)

答案 2 :(得分:0)

有一个发布向导(在Visual Studio中),让你可以自动更改web.config的部分内容。这恰好是您要问的功能。没有魔法。

答案 3 :(得分:0)

我们所做的是在自动构建过程(Hudson)中,我们根据构建的环境更改web.config中的值。不幸的是,没有一种神奇的方法可以做到这一点。

答案 4 :(得分:0)

您可以为数据库使用别名。您只需将这些别名指向不同环境中的不同服务器即可。如果我没记错的话,存储在HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSSQLServer \ Client \ Connect下的注册表中。然后在connectionstring中使用别名。

回应杰森的回应: 我们使用Enterprise Library Environments配置不同的环境参数,并通过msbuild调用Merge Configuration Tool,为每个环境生成不同的配置。部署过程根据要安装的环境选择正确的配置文件。

答案 5 :(得分:0)

对于部署,我认为这是op所要求的,一个创建多个配置,在发布中,选择不同的配置。这些称为转换,它们在web.config上运行。一个人将拥有至少三个发布配置文件,一个用于开发,测试和产品。通过这种方式,可以改变连接字符串。可以打开自定义错误,关闭调试并更改配置变量的值。我强烈推荐它。

我有一个类似的问题。我有一个日志表阅读器。我希望它能够读取开发,测试和生产数据库中的日志表。主要困难在于我的用户帐户没有权限查看测试和生产。这是一些愚蠢的安全事情。我在应用程序中模仿的用户确实拥有权限。我正在努力告诉MVC使用模拟用户构建测试和生产模型。