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

Ori*_*lBG 6 web-config msdeploy visual-studio web-config-transform azure-devops

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

由于我想要包含稍后应用的配置和转换的包,因此我将构建操作设置为内容:

<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>
Run Code Online (Sandbox Code Playgroud)

包正确完成,部署也是如此(MyConfig.config 已根据其运行的环境更改参数)。我的问题是在服务器机器上我也有 MyConfig.*.config 文件。

查看官方文档示例说明(https://docs.microsoft.com/en-us/vsts/pipelines/tasks/transforms-variable-substitution?view=vsts#xml-transformation-example)没有给出任何明确的信息. 这只是“msbuild 会在打包之前完成,而 azure 不会”,但并没有解释如何做到这一点。

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

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

源文件夹:
    $(wwwRoot)\

内容:
    **\*.Debug.config
    **\*.Release.config
    **\*.UAT.config
    **\*.PROD.config

sta*_*SFT 0

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

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

使用 Visual Studio 进行 Web 项目部署的 Web.config 转换语法

更新:

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

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