在最近的项目中,我们使用Visual Studio 2010 RC + Silverlight 3,并首次尝试使用Scrum的方式来管理项目。这是我们第一个使用TFS 2010 RC来进行团队管理的项目,并在其中尝试使用了最新的Team Build 来进行持续集成。在创建完Build Definition之后,每次Check-in都会触发服务器端的Team Build。在我们完成第一次的check-in之后发现,Team Build无法编译。

clip_image001

Figure 1: Team Build failed for the Silverlight application

       在对应Build Definition的Build Explorer窗口中通过点击Open按钮打开失败的build项(上图窗口),我们会发现Visual Studio对具体的编译失败的描述信息:

image

Figure 2:Silverlight Targets在Build Server上无法找到导致Team Build失败

       上图的黄色显亮部分表明,在Build Server上没有找到编译Silverlight应用程序所需要的组件(其实就是SDK中所带的Microsoft.Silverlight.CSharp.targets)。原来在Build Server上我们只安装了Silverlight 2.0 SDK却没有Silverlight3. 到微软官方网站下载Silverlight 3 SDK并安装到Build Server上,然后在Build Explorer中Queue New Build,结果发现再次失败:

image

Figure 3:Team Build再次失败缘于无法找到WebApplication.targets

      在Build Server上只安装了Team Foundation Server 2010 RC和Visual Studio 2008,没有安装Visual Studio 2010. 而我们解决方案是用Visual Studio 2010创建的,所以MSBuild找不到编译WebApplication的Targets.针对此问题,Fixing Web Application Projects with automated TFS Builds提供了两种解决办法,但通常我们都采用后者:直接将C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0文件夹拷贝到build server上。OK, 再次build。

image

Figure 4: Team Build无法通过而且显示没有安装Silverlight 3 SDK

      很明显的,我们已经安装了Silverlight 3 SDK,但为何仍然提示无法编译呢?经查证,这是一个Silverlight的bug,Silverlight 2.0 和 Silverlight 3都无法在x64环境中编译,所以只能使用x86. (Build Silverlight 2.0 or 3.0 projects with an x64 TFS 2010 Build Agent) OK。在Team Explorer中打开我们的Build Definition,并展开Process | Advanced 节点,将MSBuild Platform从Auto改成x86.

image

Figure 5:在Silverlight项目中MSBuild Platform必须设置为x86

       再次Build,发现仍然无法通过。为什么呢?原来无法在Build Server上运行Code Analysis。

image

Figure 6: Build Server无法运行Code Analysis

       又一个棘手的问题,没有头绪该如何处理。因为在Visual Stuido目录下也灭有CodeAnalysis目录,那是否可以像targets一样从其它机器上直接拷贝目录呢?答案是不行。于是在Build Server上安装了Visual Studio 2010. 然后很lucky的通过了:

clip_image007

Figure 7:Successfully builds

综上所述,如果使用Team Build来持续集成Application,你需要在Build Server上安装:

  • Team Foundation Build Service 2010 (or 2008)
  • Visual Studio 2010 (or 2008)
  • MSBuild编译此类应用程序所需要的插件诸如WebApplication.targets,Silverlight SDK等
  • 另外,对于Silvrlight项目还需要特别设置MSBuild Platform为32bit
posted on 2010-03-17 21:27  Allan.  阅读(1564)  评论(4编辑  收藏  举报