从C#项目仅发布转换后的配置文件

时间:2019-06-03 11:19:42

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

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

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

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

  • Logging.config
    • Logging.Dev.config
    • Logging.UAT.config
    • Logging.Prod.config
    • 等...

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

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

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

如何实现?

2 个答案:

答案 0 :(得分:0)

构建项目后,只需在发布管道中添加一个名为 Azure App Service Deploy 的任务,如果您在下选择 XML转换,转换将自动完成>文件转换和变量替换选项菜单。
请注意,配置转换将针对*.EnvironmentName.config文件上的*.config运行,因此所有配置必须等于环境名称。例如,如果您的环境称为test,则您的配置应为*.test.config

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

答案 1 :(得分:0)

如果使用Azure DevOps,则具有内置功能来进行转换。

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

enter image description here

此选项的含义是什么?如果您有一个带有环境名称的配置文件,例如:*.UAT.config(并且在发行版中称为UAT的环境中),那么Azure DevOps将使用该文件并将其转换为常规配置文件。

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