多个构建配置可以共享一个配置转换吗?

Arv*_*tad 5 configuration continuous-integration visual-studio web-config-transform slowcheetah

我正在使用SlowCheetah for XML转换项目中的一堆配置文件.

但是,同样的解决方案是负载平衡设置的一部分,其中一些配置值在不同服务器之间不同(在这种情况下为两个).

我有以下构建配置

  • 调试
  • 发布
  • Release.Test
  • Release.Prod1
  • Release.Prod2

除了其中一个配置文件中的某些值外,Release.Prod1和Release.Prod2中的几乎所有内容都是相同的.有没有办法让我可以Something.Release.Prod.Config在这两个构建配置上使用一个文件,而不是有两个相同的文件(Something.Release.Prod1.ConfigSomething.Release.Prod2.Config)?

......并详细说明:在这种情况下,我正在部署到两个环境,因此一个重复的文件并不是一个巨大的危机.如果您有十台或一百台服务器怎么办?我认为没有理由为什么使用CI服务器(在这种情况下特别是TeamCity)的设置不应该这样做,即使我认为在这样的环境中更常见的自定义设置.

这通常如何处理?

我想我可以在实际转换发生前作为构建步骤来回做一些文件的魔术复制,但这似乎是一个混乱而过于复杂的解决方案.

Ste*_*eve 1

配置转换由 TransformsFiles.targets 文件中的 $(Configuration) 变量处理。

 <TransformXml Source="@(_FilesToTransformNotAppConfig->'%(FullPath)')"
                  Transform="%(RelativeDir)%(Filename).$(Configuration)%(Extension)"
                  Destination="@(_FilesToTransformNotAppConfig->'$(OutDir)%(RelativeDir)%(Filename)%(Extension)')"
                  Condition=" Exists('%(RelativeDir)%(Filename).$(Configuration)%(Extension)') " />
Run Code Online (Sandbox Code Playgroud)

在这里,您可以将 $(Configuration) 更改为任何其他值,例如“Environment”。然后只需在 MSBuild args 中设置“环境”变量 -

/p:Environment=Prod
Run Code Online (Sandbox Code Playgroud)

这应该允许您保留构建设置并独立进行转换。