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

时间:2012-10-01 09:18:24

标签: visual-studio configuration continuous-integration 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)的设置不应该这样做,即使我认为在这样的环境中更常见的自定义设置。

这通常如何处理?

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

1 个答案:

答案 0 :(得分: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)') " />

在这里,您可以将$(Configuration)更改为任何其他值,例如“Environment”。然后在MSBuild args -

中设置“Environment”变量
/p:Environment=Prod

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

相关问题