我正在努力让web.config转换与自动构建一起使用。
我们有一个相当大的解决方案,包含一个ASP.NET Web应用程序和八个类库。我们有三个开发人员从事该项目,到目前为止,每个人都已将解决方案“发布”到本地文件夹,然后使用文件副本部署到测试服务器。我正在尝试使用TFS 2010实现自动构建/部署解决方案。
我创建了一个构建定义,并在构建过程模板中添加了对msdeploy.exe的调用,以将应用程序部署到测试服务器。到目前为止,太棒了!
然后我尝试实现web.config转换,但我无法让它们工作。如果我在PC上本地构建和发布,则“publish”文件夹具有正确的转换后的web.config文件。
使用团队构建,转换不会发生,我只有基本的web.config文件。
我尝试在Web应用程序的项目文件中添加一个构建后的步骤,正如其他人所建议的那样,类似于:
<target name="AfterBuild">
<TransformXml Source="Web.generic.config"
Transform="$(ProjectConfigTransformFileName)"
Destination="Web.Config" />
</target>
但由于源web.config文件具有“applicationSettings”部分,因此失败。我收到了错误
无法找到元素'applicationSettings'的架构信息。
我见过关于在构建定义中添加MSBuild任务的参数的建议,比如
/t:TransformWebConfig /p:Configuration=Debug
但是,当构建类库项目时,这可能会失败,大概是因为它们没有web.config文件。
有什么想法吗?像其他人一样,我认为这只会“正常工作”,但显然不是。这是我需要工作的最后一部分,这让我很生气。我不是一个msbuild专家,所以简单明了!
提前致谢。
道格
答案 0 :(得分:3)
我刚刚经历过这个。我们的构建有点复杂,因为我们在一个解决方案中有8个类库和9个Web应用程序。但流程是一样的。
首先摆脱你的后续构建目标。你不需要那个。
您需要使用MSDeployPublish服务。这将要求在目标服务器上正确安装和配置它。有关此部分的信息,请查看以下链接:
请注意,必须使用正确的用户权限正确配置相关服务器。以下网站帮助我正确设置。
http://william.jerla.me/post/2010/03/20/Configuring-MSDeploy-in-IIS-7.aspx
http://vishaljoshi.blogspot.com/2010/11/team-build-web-deployment-web-deploy-vs.html
How can I get TFS2010 to run MSDEPLOY for me through MSBUILD?
下一部分要求您的构建定义具有设置为执行发布的正确MSBuild参数。这些参数在Process&gt;中输入。 3.Advanced&gt;构建定义的MS Build Arguments行。这是一个提示:
(don't change the following for any reason)
/p:DeployOnBuild=True
/p:DeployTarget=MsDeployPublish
/p:CreatePackageOnPublish=False
/p:MSDeployPublishMethod=WMSVC
/p:SkipExtraFilesOnServer=True
/p:AllowUntrustedCertificate=True
(These control where it's going)
/p:MSDeployServiceUrl="https://testserver.domain:8172/msdeploy.axd"
/p:UserName=testserver\buildaccount
/p:Password=buildacctpassword
/p:DeployIisAppPath="MyApp - TESTING"
显然,必须在目标服务器上的IIS中配置用户才能访问该axd(请参阅前面的链接)。 IisAppPath是目标服务器上的网站名称。
您不必为配置转换做任何特殊操作,因为构建本身会为您处理。只需在Process&gt;行中输入正确的设置即可。 1.要求&gt;要构建的项目&gt;要构建的配置。
答案 1 :(得分:1)
我没有尝试通过在构建过程模板中添加任务来进行部署,而是在Vishal Joshi的博客文章here中遵循了建议。
现在整个项目已经构建和部署,web.config转换也可以工作。辉煌!
我现在有另一个问题需要解决! Web应用程序引用Web服务,构建过程会生成XmlSerializers dll。但是,尽管构建正常,但它不会部署到Web主机。我认为这需要一个新帖子!
道格