5

我正在使用 SlowCheetah 进行 XML 转换项目中的一堆配置文件。

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

我有以下构建配置

  • 调试
  • 发布
  • 发布.测试
  • 发布.Prod1
  • 发布.Prod2

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

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

这通常是如何处理的?

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

4

1 回答 1

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) 更改为任何其他值,例如“环境”。然后只需在您的 MSBuild 参数中设置“环境”变量 -

/p:Environment=Prod

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

于 2013-02-08T22:44:01.323 回答