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

问题描述 投票:0回答:2

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

设置存储在多个

.config
文件中,并且使用转换文件应用环境特定设置。

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

  • 日志记录.config
  • 日志记录.Dev.config
  • 记录.UAT.config
  • 日志记录.Prod.config
  • 等等...

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

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

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

如何实现这一目标?

c# asp.net-mvc azure-devops webdeploy
2个回答
0
投票

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

在您的发布管道中,无论您部署到本地 IIS(使用

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

这个选项的含义是什么?如果您有一个带有环境名称的配置文件,例如:

*.UAT.config
(并且在发布到名为 UAT 的环境中),那么 Azure DevOps 会获取该文件并将使用常规配置文件进行转换。

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


0
投票

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


请注意,配置转换将针对

*.EnvironmentName.config
文件上的
*.config
运行,因此所有配置都必须等于环境名称。例如,如果您的环境称为测试,那么您的配置应该是
*.test.config


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

© www.soinside.com 2019 - 2024. All rights reserved.