【问题标题】:Can multiple build configs share one config transformation?多个构建配置可以共享一个配置转换吗?
【发布时间】:2012-09-22 03:19:08
【问题描述】:

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

但是,同样的解决方案是负载平衡设置的一部分,其中一些配置值在不同服务器(在本例中为两个)之间存在差异。

我有以下构建配置

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

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

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

这通常是如何处理的?

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

【问题讨论】:

  • 我们也在此处尝试解决的问题... T4 模板正在讨论中,但我并不特别喜欢它们。我更喜欢配置转换,但希望将其扩展到调试和发布版本之外。就像你试图弄清楚
  • 超越调试和发布很容易,只需从 Build => Build Configurations 菜单添加更多构建配置。让他们中的一些人共享一个文件,但是......

标签: visual-studio configuration continuous-integration web-config-transform slowcheetah


【解决方案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

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

【讨论】:

    猜你喜欢
    • 2010-12-18
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    相关资源
    最近更新 更多