在MSBuild中设置Web Deploy参数值

时间:2016-04-26 12:53:06

标签: msbuild webdeploy

我使用MSBuild构建和部署Web应用程序。

 MSBuild.exe MySite.csproj /p:DeployOnBuild=True /p:WebPublishMethod=MSDeploy /p:MSDeployServiceURL=mysite.example.com

我的网站连接到SQL Server数据库。

<connectionStrings>
  <add name="dbconnection"
       connectionString ="Data Source=(local);Initial Catalog=MySite;Integrated Security=SSPI;"
       providerName="System.Data.SqlClient" />
</connectionStrings>

我是针对本地数据库开发的,但是当站点部署到测试服务器或生产服务器时,需要更改连接字符串。

我在名为dbconnection

的文件中声明了名为parameters.xml的部署参数
<parameter name="dbconnection"
           defaultValue="Data Source={server};Initial Catalog={database};Integrated Security=SSPI;"
           tags="DBConnectionString"> 
  <parameterEntry type="XmlFile"
                  scope="\\Web.config$"
                  match="/configuration/connectionStrings/add[@name='dbconnection']/@connectionString"/> 
</parameter>

我可以轻松创建参数化的Web部署包,并使用msdeploy进行部署。

msdeploy -verb:sync
         -source:package:MySite.zip
         -dest:iisApp="Site1/MySite"
         -setParam:name=dbconnection,value="Data Source=.\SQLEXPRESS;Initial Catalog=MySiteTest;Integrated Security=SSPI"

但是,我真的希望能够在MSBuild中完成所有工作。什么是MSBuild等效于-setParam

1 个答案:

答案 0 :(得分:1)

本地调试时不使用参数化。因此,您所要做的就是将parameters.xml文件中的defaultValue设置为所需的连接字符串。

我们为每个环境(DEV,QA,MOCK,PROD)创建一个SetParameters文件,并在MSBuild创建带有相应setParam文件的WebDeploy包之后调用MSDeploy。我不相信直接从MSBuild部署时可以使用自定义SetParameters文件。

这是一篇进一步描述参数化的文章:

xpathtester

更新:

史蒂文和我在SO之外进一步工作,以更好地了解他的用例。我们再次确认MSDeployPublish目标不支持设置参数值覆盖。为了解决他的用例,我写了一些MSBuild脚本来提供他正在寻找的功能,并写了一篇关于它的博客文章 -

http://dotnetcatch.com/2014/09/08/parameterizationpreview-visual-studio-extension/

它基本上通过在MSBuild.exe命令行上通过MSBuild属性传递SetParameters文件或键/值对列表来工作。 MSBuild脚本通过设置MsDeployDeclareParameters ItemGroup来解析它并覆盖参数。

msdeploy.exe ... /p:MSDeployPublishSetParametersFile=SetParameters.Test.xml
msdeploy.exe ... /p:MSDeployPublishSetParameters=testSetting='changed_fromSetParam';IIS Web Application Name='Default Web Site/app13'