【问题标题】:Set Web Deploy parameter values in MSBuild在 MSBuild 中设置 Web Deploy 参数值
【发布时间】:2016-04-26 12:53:05
【问题描述】:

我使用 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>

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

我在一个名为 parameters.xml 的文件中声明了一个名为 dbconnection 的部署参数

<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 中完成所有工作。 -setParam 的 MSBuild 等效项是什么?

【问题讨论】:

    标签: msbuild webdeploy


    【解决方案1】:

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

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

    这是进一步描述参数化的帖子:

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

    更新:

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

    http://dotnetcatch.com/2016/04/27/setparameters-via-msbuild-commandline/

    它基本上通过在 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'
    

    【讨论】:

    • 如果没有办法做到这一点,我会感到惊讶。 Visual Studio 已经通过 ItemGroup 在 MSBuild 中支持 declareParamMsDeployDeclareParameters。我也遇到过MsDeploySimpleSetParameters,但它似乎没有在任何地方使用。
    • 我同意这应该是一个内置选项,但我从来没有找到方法。一般来说,如果直接从 MSBuild 部署,配置转换是编辑配置的最佳方式。
    • 目标文件包含一些未使用的代码,暗示更好地支持 MSDeploy 参数(在 Microsoft.Web.Publishing.targets) 中。在我看来,他们正在添加 setParamsetParamFile 支持MSBuild,但后来放弃了。
    • 史蒂文,我根据我们的工作更新了我的答案。如果您同意这解决了您的问题,请将其标记为答案。谢谢!很高兴与您合作。
    • @chief7 请问你能更新你提供的链接吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    相关资源
    最近更新 更多