团队构建2010和web.config转换存在问题

4

我在尝试使用自动化构建实现web.config转换,但是遇到了困难。

我们有一个相当大的解决方案,包含一个ASP.NET Web应用程序和八个类库。我们有三名开发人员在项目上工作,迄今为止,每个人都将解决方案“发布”到本地文件夹,然后使用文件复制部署到测试服务器。我正在尝试使用TFS 2010实现自动化构建/部署解决方案。

我创建了一个构建定义,并在构建过程模板中添加了对msdeploy.exe的调用,以将应用程序部署到测试服务器。目前为止,一切顺利!

然后,我尝试实现web.config转换,但我无法让它们起作用。如果我在我的PC上本地构建和发布,"发布"文件夹会有正确的转换后的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专家,请保持简单明了!谢谢您提前的帮助。
道格
2个回答

3

我刚刚经历了这个过程。我们的构建稍微复杂一些,因为我们在一个解决方案中有8个类库和9个Web应用程序。但流程是相同的。

首先要摆脱您的“After Build”目标。您不需要那个。

您需要使用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 > 3.高级 > 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 > 1. Required > Items to Build > Configurations To Build行中具有正确的设置即可。


1
只是一点小提示。在所有这些中有两个难点。第一个是正确地在Web服务器上安装MSDeployService。第二个是找出所有正确的MSBuild参数。Doug提到的某些网站针对的是在同一台机器上构建和部署,因此它们的参数无法使用。总之,第一次尝试大约花了我6个小时才弄清楚。现在它已经设置好了,我可以在大约5分钟内创建一个新的构建定义。 - NotMe
很棒的文章,Chris。我也经历了所有这些(花了我一点时间,部分原因是服务器上有些奇怪的问题,部分原因是使用托管的TFS),但这真的是对这个主题的很好的总结。谢谢。 - MemeDeveloper
另外一件事:我上周在新服务器上设置了这个。MSDeploy的最新安装程序比以前的好多了。 - NotMe

1

我不再尝试通过将任务添加到构建过程模板中来部署,而是遵循Vishal Joshi博客文章here中的建议。

现在整个项目都已经构建和部署完成,并且web.config转换也可以正常工作。太棒了!

我现在有另一个问题要解决!Web应用程序引用Web服务,构建过程会生成一个XmlSerializers dll。但是,尽管它已经构建成功,但它没有被部署到Web主机上。我认为这需要一篇新的文章!

Doug


在这里找到了解决我的XmlSerializers问题的答案:https://dev59.com/uVDTa4cB1Zd3GeqPHTzu。 - Doug

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接