部署到多个Azure环境(开发,测试,生产)的推荐方法是什么?

时间:2014-07-01 18:07:26

标签: c# azure asp.net-mvc-5

我有一个使用mvc5的C#Web应用程序。它目前在Azure上运行,我有一个开发,测试和生产实例。我需要做些什么来确保数据库连接字符串在应用程序被推送到每个环境时自动更改?我知道这可以通过web.config实现,因为您可以定义Web.Debug.Config等,但是我如何针对Azure上的不同工作者角色进行此操作?我一直在互联网上寻找解决方案。简而言之,我想对多个web.config文件使用相同的方法,但是对于Azure。

作为一些额外的背景,对于我的解决方案,我将我的存储库库分解为一个单独的项目,并且我试图从配置文件中获取连接字符串(让我们说,domain.dll是其名称)包含它的库)。首先,当我只使用web.config但当我不得不从另一个辅助角色运行我的域DLL文件时,配置开始返回null;因为从其他工作进程(非Web)运行时,此代码不会运行。这似乎引入了一个有趣的问题,如果我需要在Web之外和Azure之外使用domain.dll代码怎么办?我如何仍然保持Azure和web.config提供的连接字符串优势?

3 个答案:

答案 0 :(得分:1)

你应该区分“在发布模式下构建”和“#39;并且'部署到环境X'。

在发布模式下构建应该只是将配置文件转换为生产就绪状态'。使用MsDeploy you can parameterize your configuration files所以在部署时,它们将填充您提供给MsDeploy脚本的参数。

没有灵丹妙药可以自动更改每个环境的连接线等。但通过这种方式,您可以标准化您的流程,这将极大地帮助您提高产品的稳定性。

需要注意的一点是,部署的参数化将破坏简单的工作流程并发布'来自视觉工作室内部,因为在发布向导期间您没有选择填写参数...:'(

答案 1 :(得分:1)

您应该通过azure门户管理连接字符串,而不是通过配置文件转换。使用MVC应用程序,这很容易,转到配置选项卡并在那里设置连接字符串configure connection strings

对于像web作业这样的项目使用Microsoft.WindowsAzure.ConfigurationManager

  

提供统一的API来加载配置设置,无论如何   托管应用程序的位置 - 无论是在本地还是在云中   服务

答案 2 :(得分:1)

假设:您使用的是Web服务,而不是Web站点。有区别。

有两种方法可以满足您的需求:

  1. 对于辅助角色,您可以执行app.config转换,几乎与web.config中的方式相同。只有您需要SlowCheetah才能执行此操作。有一个nuget包,还有VS扩展来创建转换文件。用这种方法太过分了。我从来不喜欢它,所以转到第二个选项。

  2. 如果运行Web服务,则可以将连接字符串指定为worker-role配置的一部分。转到Azure项目并打开worker-role的属性: Worker Role configuration

  3. 在那里你可以添加数据库连接字符串。并为您运行的每个环境(dev,test,prod)创建配置。并为每个环境放置一个不同的连接字符串。

    要获取连接字符串,请执行:

    CloudConfigurationManager.GetSetting("DatabaseConnectionString")
    

    部署网站后,您将在Azure门户的Configure标签中看到这些配置值。