2016-09-30 75 views
2

我有一个托管在Azure上的Web应用程序。
目前有几个网站正在使用从bitbucket中检索的相同代码。
各种安装之间的唯一区别在于它们在针对不同数据库的web.config文件中有不同的连接字符串。请勿使用GIT覆盖Azure上的配置文件

每当我进行错误修复时,我会在bitbucket上上传我的新代码,Azure从BitBucket获取此代码。
目前有5个应用程序获取相同的代码,并且每次我在bitbucket上上传新代码时,我必须手动编辑Azure上的web.config文件,以便为每个应用程序定位正确的数据库。

有没有办法指示Azure在从Bitbucket接收到新代码时不覆盖web.config文件?

回答

1

在可能性是web.config版本,而是一个模板文件web.config.tpl,和值文件(值为每个应用程序)

然后,您可以使用content filter driver,使用.gitattributes declaration

smudge (来自 “Customizing Git - Git Attributes” 形象, “Pro Git book”)

所生成的实际web.config保持(由.gitignore)忽略。
这意味着您的实际工作树不会变得“脏”。

涂抹脚本选择正确的值的文件和根据git checkout期间涂抹脚本被施加在模板上产生正确web.config

1

基于您正在部署的网站更改设置的责任可能在发布中。 VSTS支持将软件从BitBucket发布到Azure。 创建一个VSTS账户。在帐户中创建一个项目。 创建一个新的版本并将BitBucket配置为源。 创建一个版本,将Web应用程序部署到五个地方中的每一个地方。 使用变量为每个Web应用程序设置不同的连接字符串。

1

为什么根本不需要在web.config中硬编码连接字符串。只需从应用程序设置中的代码中选取它即可。

https://azure.microsoft.com/en-us/documentation/articles/web-sites-configure/

对于.NET应用程序,这些连接字符串被注入在运行时你的.NET配置的ConnectionStrings设置,覆盖其中关键等于链接的数据库名称现有条目..

using System.Configuration; 

// Define AzureSQLConnStr in Portal -> Web App -> Application Settings 
string AzureSQLConnStr = ConfigurationManager.ConnectionStrings["AzureSQLConnStr"]; 

门户中定义的应用程序设置/连接字符串将覆盖运行时的web.config/app.config中的值。