2011-03-31 61 views
1

让我们假装我们有以下服务器[开发,测试,生产],并且开发和测试在配置上非常相似,而生产却非常不同。web.config变换可以链接吗?

如果我使用web.config转换,这意味着我必须复制Web.dev.config和Web.test.config中的很多设置。如果我可以对我的变换使用相同的变换机制,以便test.config基于dev.config,那将会非常好。

我已经想到了两种可能的方法,我不知道任何人会的工作:

  • 试图让MSBuild的第一变换dev.config,然后对结果运行test.config我们什么时候正在测试配置下运行
  • 试图让转换机制为转换文件工作。我会以某种方式针对dev.config运行test.config并创建一个临时文件,然后将其用作针对Web.config的转换。

有没有人知道这样的事情是否可能?如果是的话,人们会怎么设置它?

回答

1

TransformXml只是在编译后调用的MSBUILD任务。如果你扩展/修改你的版本,你可以让它运行两次转换任务,或者让你的配置正常运行,然后提供第二个文件并使用任务来执行。

如果你熟悉msbuild,这很简单。如果没有,回复/评论,我会尽力在今天晚些时候提供例子。

但是最终,它有可能,因为我对过去的项目有类似的需求。

1

我有更多的配置。所有这些都与T4同步。看到我的回答here

+0

有趣的方法。包含文件的能力看起来非常好。我认为有一些地方.config转换虽然更好。例如,当涉及到替换/删除部分时,可以做得更多。或者我错过了什么? – 2011-03-31 21:22:10

+0

我同意你的意见。基于T4的方法适用于仅更改配置字符串中的值或添加/删除一个或两个部分的情况。 – 2011-04-01 05:59:10

1

尽管已经回答了这个问题,但我想用一个反映Visual Studio 2012中所做更改的答案对其进行更新,使其变得相当容易。

从Visual Studio 2012开始,可以“链接”构建和发布配置文件转换。因此,您可以拥有一个“发布”构建转换,负责处理常见配置,如关闭调试,切换自定义错误以及与发布配置文件关联的任意数量的“发布”转换,添加实例特定的数据,如连接字符串和appSettings。

在VS 2012中(以及通过 Azure SDK发布VS2010更新)现在支持发布特定变换的概念。您 现在还可以指定用于配置文件中的项目配置时 出版发布对话框上...

在这种情况下,我已经创建了一个名为型材生产,并设置 配置发布。当我发布此项目时,将按照此顺序应用以下 转换(如果文件存在)。

1.web.release.config

2.web.production。config

有关更多信息,请参阅Profile specific web.config transforms and transform preview

+0

太棒了!将不得不研究这一点 – 2013-10-16 06:40:49