CruiseControl.net,将动态值发送到某些文件

时间:2014-05-19 07:31:03

标签: web-config cruisecontrol.net

我已经搜索了几天,我也在cc.net论坛上提出了一个问题,但仍然没有答案。

我的任务是使用cc.net在构建期间使用特定值填充Web.config。这是一个例子:

我正在开发一个ASP.NET网站,我有一个带有一些配置的Web.config,例如连接字符串:

<add name="ContextName" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=DatabaseName;User Id = UserName;Password=UserPassword;" providerName="System.Data.SqlClient" />

在构建之后,我想要替换一些值并使配置看起来像这样:

<add name="ContextName" connectionString="Data Source=%SERVER%;Initial Catalog=%DATABASE%;User Id = %USER%;Password=%PASSWORD%;" providerName="System.Data.SqlClient" />

我尝试this solution,但它对我没有帮助(或者我可能不了解如何正确使用它)。

请帮我解决这个任务。

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以在构建文件上创建目标以更新web.config并在构建后调用该目标。我在构建文件中使用类似的东西,这是一个例子:

<target name="update-config" >
   <property name="export.config" value="" unless="${property::exists('export.config')}" />
   <call target="${config-settings}" /> <!-- test or stage -->
   <xmlpoke file="${export.config}" xpath="/configuration/appSettings/add[@key='ContextName']/@connectionString" value="${configValue.connectionString}" failonerror="true" />
</target>

<target name="test">
    <property name="configValue.connectionString" value="test connection string here" />
</target>

<target name="stage">
    <property name="configValue.connectionString" value="stage connection string here" />
</target>

执行编译代码并导出的目标后,您可以运行目标 update-config ,在这种情况下,我希望变量 export.config 导出的web.config的路径,然后调用另一个目标,设置connectionstring变量的值(这可以是目标测试或阶段),最后xmlpoing web.config与值。

希望这有帮助!

答案 1 :(得分:0)

您可以尝试使用这个基于XDT(web.config)转换引擎的XDT转换命令工具Config Transformation Tool,它允许您对任何XML文件运行XDT转换。您可以使用ccnet的任务块在msbuild

之后运行它

<tasks> <exec> </exec> </tasks>

有关ccnet可执行任务的更多信息,请参阅here。 有关XDT转换的更多信息,请参阅this link in MSDN library