【发布时间】:2012-03-15 13:05:09
【问题描述】:
我在 Process -> Advanced -> MSBuild Arguments 部分设置了一个 TFS 构建定义,其中包含以下信息:(为了安全起见,本文省略了 [] 括号中的值)
/p:DeployOnBuild=True
/p:MSDeployPublishMethod=RemoteAgent
/p:MSDeployServiceUrl=[URL]
/p:DeployIisAppPath=[IISPATH]
/p:UserName=[USERNAME]
/p:Password=[PASSWORD]
/p:CreatePackageOnPublish=True
/p:DeployTarget=MSDeployPublish
/p:Configuration=Development
这是我遇到的问题。我的 Web 项目中设置了许多配置,开发配置就是其中之一。如果我放弃“/p:Configuration=Development”并构建项目,然后自动部署到我们的开发环境,则 web.config 转换是错误的。它正在用另一个配置中的信息替换我的连接字符串信息。
如果我在构建过程中将“/p:Configuration=Development”放回MSBuild arg列表并在VS2010中打开web.config文件,第一次在我的IDE之外更改web.config,我可以看到已经按照 Development 配置进行了相应的 web.config 转换,但是 web.config 文件又被更改了,又回到了不正确的配置。
我的想法是,当打开“/p:Configuration=Development”时,MSBuild 是正确的,但是从 MSBuild 调用的任何进程(我假设是 MSDeploy)将站点实际部署到服务器搞错了。
哦,我使用的是 IIS6 服务器,而不是 IIS7,所以任何 IIS7 特定的功能都不会真正帮助我。
关于如何解决此问题的任何想法?
【问题讨论】:
-
是部署后出错还是部署前出错?放置文件夹中的转换配置不包括连接字符串转换。它们作为 MSDEPLOY 参数保留。
-
John,那么在此过程中,连接字符串转换何时发生?作为 MSBuild 过程的一部分,还是在从 MSBuild 调用 MSDeploy 期间?仅供参考,我依赖于通过 TFS Team Build 生成的 .cmd 文件,以及上面在构建定义的 MSBuild Arguments 位置中设置的 MSBuild Args。
-
它发生在 msdeploy 期间。实际上,转换已经发生,但对于连接字符串,结果在 parameters.xml 文件中。请回答部署后是否转换错误。
-
John,是的,部署后就出错了。由于 web.config 更改了两次,一次大约是 TFS 启动构建的一半,第二次是构建完成然后部署,b/c web.configs 第一次更改是正确的,但第二次更改不正确,我假设它是在部署之后。在创建 .zip 包的同一目录中有一个 SetParameters.xml 文件(另外,TFS Build 生成的 .cmd 文件也在其中),这也是您指的参数 xml 文件吗?
-
是的,就是这个文件。我自己发现了这个。部署后配置正确。之前,它让我心脏病发作。
标签: msbuild web-config transform tfsbuild msdeploy