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

我有一个使用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提供的连接字符串优势?

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

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

  1. 对于worker角色,您几乎可以像在web.config那样进行app.config转换。 只有你需要使用SlowCheetah 。 有一个nuget包,还有VS扩展来创建转换文件。 用这种方法有太多的烦恼。 我从来不喜欢它,所以转到第二个选项。

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

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

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

 CloudConfigurationManager.GetSetting("DatabaseConnectionString") 

部署站点后,您将在Azure门户的“ Configure选项卡中看到这些配置值。

您应该区分“在发布模式下构建”和“部署到环境X”。

在发布模式下构建应该只是将配置文件转换为“生产就绪”。 使用MsDeploy,您可以参数化配置文件,因此在部署时,它们将填充您提供给MsDeploy脚本的参数。

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

需要注意的一点是,部署的参数化将破坏Visual Studio中的简单工作流“发布”,因为在发布向导期间您没有选择填写参数…:’(

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

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

无论托管应用程序的位置如何 – 无论是内部部署还是Cloud Service,都提供统一的API来加载配置设置