如何避免在服务器上部署 *.<Environment>.config 转换
How avoid *.<Environment>.config transformations being deployed on server
我正在使用 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>
包已正确完成,部署也已正确完成(MyConfig.config 已根据其运行的环境更改参数)。
我的问题是在服务器机器上我也有 MyConfig.*.config 文件。
查看官方文档示例注释 (https://docs.microsoft.com/en-us/vsts/pipelines/tasks/transforms-variable-substitution?view=vsts#xml-transformation-example) 并没有给出任何明确的信息。它只是 "msbuild will do it before packaging and azure not" 但没有解释实现它的方法。
编辑:我采用的解决方案。
基本上我无法避免保持工件的清洁,因为它们不依赖于环境。所以在发布管道之后我添加了一个删除文件作业(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
首先,XML文件转换,需要xx..config文件。
其次,转换将在将 Web 应用程序发布到 Web 部署包或根据配置(例如发布、调试)直接发布到服务器时应用。
关于 web 部署包,有 xx.SetParameters.xml 文件,其中包含相关的转换元素,该值将在部署期间应用。您可以在部署之前更新该文件。
Web.config Transformation Syntax for Web Project Deployment Using Visual Studio
更新:
您也可以将文件存储在Secure Files,然后通过复制文件任务将文件复制到相关文件夹:
- 下载安全文件任务
- 复制文件任务(源文件夹:
$(agent.builddirectory)\..\_temp
)
您可能需要考虑创建一个 post 部署脚本来清理这些文件,并在部署结束时将其添加到 运行 的发布脚本中。
我正在使用 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>
包已正确完成,部署也已正确完成(MyConfig.config 已根据其运行的环境更改参数)。 我的问题是在服务器机器上我也有 MyConfig.*.config 文件。
查看官方文档示例注释 (https://docs.microsoft.com/en-us/vsts/pipelines/tasks/transforms-variable-substitution?view=vsts#xml-transformation-example) 并没有给出任何明确的信息。它只是 "msbuild will do it before packaging and azure not" 但没有解释实现它的方法。
编辑:我采用的解决方案。
基本上我无法避免保持工件的清洁,因为它们不依赖于环境。所以在发布管道之后我添加了一个删除文件作业(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
首先,XML文件转换,需要xx..config文件。 其次,转换将在将 Web 应用程序发布到 Web 部署包或根据配置(例如发布、调试)直接发布到服务器时应用。
关于 web 部署包,有 xx.SetParameters.xml 文件,其中包含相关的转换元素,该值将在部署期间应用。您可以在部署之前更新该文件。
Web.config Transformation Syntax for Web Project Deployment Using Visual Studio
更新:
您也可以将文件存储在Secure Files,然后通过复制文件任务将文件复制到相关文件夹:
- 下载安全文件任务
- 复制文件任务(源文件夹:
$(agent.builddirectory)\..\_temp
)
您可能需要考虑创建一个 post 部署脚本来清理这些文件,并在部署结束时将其添加到 运行 的发布脚本中。