On Thursday, I joined my illustrious colleagues Jason and Tahmoures in presenting various aspects of Microsoft’s Team System to our development team at our monthly meeting. Following a rousing offering from Tahmoures on Team Projects and Jason’s handy exhibition of Version Control features, your humble narrator demonstrated the Continuous Integration goodness provided by Team Foundation Build.
As advertised, here is a .zip file containing some of my materials from the presentation:
- The Powerpoint (2007) Presentation
- MSBuild Code Snippets for adding automated deployment to a Team Build
Also, just because I like you, here is a trail of uniform resource locators that will perhaps begin to quench your thirst for Team System/Team Foundation Build knowledge.
- The Team System 2008 Trial Virtual PC Image (Microsoft)
- Team Foundation Build Overview (MSDN)
- VSTS for Team Foundation Server Tutorials (visualstudioteamsystem.com)
- 7 Steps to MSBuild (Brennan’s Blog)
- Team System Videos (Team System Rocks)
- Team Build Target Map (Accentient Blog)
Thanks to Tahmoures and Jason, and the rest of the Aptera Developers. You guys rock, and I had a blast.
I figured out why the ClickOnce app didn’t deploy! Those of you who were still awake at the end of my part of the presentation know what I’m talking about.
It seems MSBuild targets are not at all like .NET events, in that you cannot have multiple separate “handlers” for the same target. I had one Target node addressing the AfterDropBuild target for deploying the website, followed by another Target node also addressing the AfterDropBuild target for the ClickOnce publish.
When I merged them into one Target node, the heavens opened up and there was automated ClickOnce publishing:
<PropertyGroup> <TargetPath>\\TFSRTM08\ApteraDemo\FanSite\</TargetPath> <WebSiteFolder>ApteraFanSite</WebSiteFolder> <ProjectPath>Main\Administration\Administration.csproj</ProjectPath> <PublishPath>\\TFSRTM08\ApteraDemo\Admin\</PublishPath> </PropertyGroup> <Target Name="AfterDropBuild"> <!--Deploy Website--> <Exec Command="xcopy /y /e "$(DropLocation)\$(BuildNumber)\Release\_PublishedWebsites\$(WebSiteFolder)" "$(TargetPath)""/> <!--Deploy Windows App--> <MSBuild Projects="$(SolutionRoot)\$(ProjectPath)" Properties="PublishDir=$(PublishPath)" Targets="Publish" /> </Target>