如何避免在服务器上部署*。<environment> .config转换

时间:2018-06-20 10:55:16

标签: visual-studio web-config azure-devops msdeploy web-config-transform

我正在使用VSTS在多个环境中进行部署。而且像往常一样,配置文件中的某些参数需要根据环境而有所不同,因此我将使用配置转换将其部署在目标环境中。

由于我希望同时包含配置和转换的软件包,因此我将Build Action设置为Content这样:

<Content Include="App_Config\MyConfig.config" />
<Compile Include="App_Config\MyConfig.prod.config">
  <DependentUpon>MyConfig.config</DependentUpon>
</Compile>
<Compile Include="App_Config\MyConfig.uat.config">
  <DependentUpon>MyConfig.config</DependentUpon>
</Compile>
<Compile Include="App_Config\MyConfig.dev.config">
  <DependentUpon>MyConfig.config</DependentUpon>
</Compile>

该软件包正确完成并且也进行了部署(MyConfig.config的参数根据其运行的环境而有所更改)。 我的问题是在服务器计算机上也有MyConfig。*。config文件。

查看官方文档示例注释的(https://docs.microsoft.com/en-us/vsts/pipelines/tasks/transforms-variable-substitution?view=vsts#xml-transformation-example)并不能使您清楚。只是“ msbuild会在打包之前先做,天青不行”,但是没有说明这样做的方法。

编辑:我使用的解决方案。

基本上,我无法避免保持工件整洁,因为它们不依赖于环境。因此,在所有版本发布管道之后,我添加了一个删除文件作业(https://docs.microsoft.com/en-us/vsts/pipelines/tasks/utility/delete-files?view=vsts),以删除具有以下参数的所有配置文件:

Source Folder:
    $(wwwRoot)\

Contents:
    **\*.Debug.config
    **\*.Release.config
    **\*.UAT.config
    **\*.PROD.config

2 个答案:

答案 0 :(得分:0)

首先,通过XML文件转换,需要xx..config文件。 其次,当将Web应用发布到Web部署程序包或直接根据配置直接发布到服务器时(例如Release,Debug),将应用转换。

关于Web部署程序包,有xx.SetParameters.xml文件,其中包含相关的转换后的元素,该值将在部署期间应用。您可以在部署之前更新该文件。

Web.config Transformation Syntax for Web Project Deployment Using Visual Studio

更新:

您还可以将文件存储在Secure Files中,然后通过“复制文件”任务将文件复制到相关文件夹:

  1. 下载安全文件任务
  2. 复制文件任务(源文件夹:$(agent.builddirectory)\..\_temp

答案 1 :(得分:0)

您可能需要考虑创建部署后脚本来清理这些文件,并将其添加到发布脚本中以在部署结束时运行。