【问题标题】:Publish only transformed config files from a c# project仅从 c# 项目发布转换后的配置文件
【发布时间】:2019-06-03 11:19:42
【问题描述】:

我们有一个 C# ASP.MVC 解决方案,由许多支持多种解决方案配置的独立项目组成。每个配置都已到位,因为每个环境需要具有不同的设置,同时共享相同的代码库。

设置存储在多个.config 文件中,并使用转换文件应用环境特定设置。

例如,我们在 Logging 项目中有一个 Logging.config 文件,该文件存储了 Logger 设置和相关的转换文件。在解决方案资源管理器中,它看起来像这样:

  • Lo​​gging.config
    • Lo​​gging.Dev.config
    • Lo​​gging.UAT.config
    • Lo​​gging.Prod.config
    • 等等……

我们正在使用 Azure DevOps Pipelines 创建一个构建包,但是即使代码库不受影响,我们也不得不多次重新构建项目,因此我们正在寻找一种优化流程的方法,理想情况下应该看起来像这样:

  • 在发布模式下构建代码
  • 发布使用开发设置转换的配置
  • 发布使用 UAT 设置转换的配置
  • 发布使用 Prod 设置转换的配置
  • 等等……

优点是我们可以在每个环境中部署相同的代码,并将相关配置应用到网站目录的顶部。

如何做到这一点?

【问题讨论】:

  • 您会在部署时执行此操作。有 1 个构建过程,然后当您部署到一个环境时,您只需删除其他环境的配置文件并为您要部署到的环境重命名。这取决于您如何部署以及如何执行此操作,但我们做同样的事情,只是有一个 powershell 脚本,它接受一个参数来识别环境。

标签: c# asp.net-mvc azure-devops msdeploy webdeploy


【解决方案1】:

如果您使用 Azure DevOps,您可以使用内置功能进行转换。

在您的发布管道中,无论您是部署到本地 IIS(使用 IIS Web App Deploy 任务)还是部署到 Azure(使用 Azure App Service Deploy 任务),您都有“文件转换和变量替换选项”,在那里您可以检查“ XML 转换”。

这个选项是什么意思?如果您有一个带有环境名称的配置文件,例如:*.UAT.config(并且在发布到名为 UAT 的环境中),那么 Azure DevOps 会获取该文件并将使用常规配置文件进行转换。

因此,您有 一个 构建并在发布管道中转换配置文件并将应用程序部署到您的环境。

【讨论】:

  • 但这仍然会导致发布所有特定于环境的 .config 文件,而 OP 希望 only 发布转换后的配置文件。该任务不会删除转换 .config 文件。
【解决方案2】:

构建项目后,只需在发布管道中添加一个名为 Azure App Service Deploy 的任务,如果您在 下选择 XML 转换,您的转换将自动完成文件转换和变量替换选项菜单:


请注意,配置转换将在 *.config 文件上为 *.EnvironmentName.config 运行,因此所有配置都必须与环境名称相同。例如,如果您的环境被称为测试,那么您的配置应该是 *.test.config

另一种方法是使用 XDT Transform 任务,该任务旨在用于此用途。在转换字段中,您可以像这样设置转换:Web.$(environment).config => web.config,其中 $(environment) 是您的变量,您可以在其中设置环境名称:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-06
    • 2016-10-18
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    相关资源
    最近更新 更多