Generating Documentation with Team Build
This topic provides instructions for using the help file builder in conjunction with Team Build to
generate documentation for your projects. This information was originally supplied by Tim Dallmann in the MSDN
Developer Documentation and Help System forum. It was revised by Jeroen Vos to provide up to date information on
using the Sandcastle Help File Builder v1.8.0.0 or later with Visual Studio Team Foundation Server 2008 SP1.
Since I do not have a copy of Team Build to test against, the information in this topic may not be
completely accurate for all users. Also note that current versions of the help file builder provide a Visual
Studio Package that allows integration of help file builder projects into Visual Studio solutions. As such, this
information is subject to change.
On newer version of the build server it may be necessary to disable the parallel build setting in
the build definition in order for the build to work properly. For the default build template, you can find the
setting under Process | 3. Advanced | MSBuild Multi-Proc. Set that option to false.
The Sandcastle Help File Builder includes a GUI for editing documentation generation properties on
the client and also provides a VSPackage for full integration with Visual Studio. The project file is a standard
MSBuild project file and can be built from the command line using the MSBuild executable. The output from
Sandcastle can be copied with the build script to any location you like. For example, it can be copied to Team
Foundation Server and a link to it can be placed on the team's project site.
Download and install Sandcastle,
the HTML Help Workshop, and the Sandcastle Help File Builder on your development machine and your build server.
Run the Sandcastle Help File builder and create a new project. Save it in the root folder of
your solution if using the standalone GUI to manage the project.
Add the solution or the project files as documentation sources. That way, the help file
builder will include all projects and project outputs in the build. If you do not add Visual Studio Solution or
project files, make sure the assemblies you want to document are built to the same location relative to the help
file builder's project file on your development machine as they are on your build machine. In addition, you can
specify the Configuration and Platform project properties in
the build script to select the Debug or Release version rather
than hard coding the paths to them in the project file.
If you used solution or project files as the documentation sources you do not need to worry
about dependencies as they are taken care of automatically. However, if you add assemblies or XML comments files
as documentation sources you may need to add dependencies manually too. In that case, make sure that the
dependencies are located in the same location relative to the help file builder project file on both the
development machine and the build machine.
You may find that the build fails on the build machine because it cannot find one or more
of the tools (the Sandcastle tools such as MRefBuilder or the help compiler). If this
occurs, specify the paths to the tools in the help file project's Paths category
properties.
Set all other project properties as needed.
If using the standalone GUI to manage the project, add the generated .shfbproj
project file to your Visual Studio solution as a Solution Item and check it in.
Modify your build file. This example uses a daily build to generate documentation:
Add a GenerateDocumentation target to your build script. This
target was chosen because the TFS team meant it to be used specifically for this purpose. This will call the
Sandcastle Help File Builder project to create the help files.
Because Team Build overrides the OutDir property for all built
solutions/projects to point to one folder that will store all build output, you should provide this property to
the help file builder project file if Visual Studio solution or project files were specified as the documentation
sources. If you do not, the help file builder will look in the wrong place for the assemblies to document.
<Target Name="GenerateDocumentation">
<!-- Build source code docs -->
<MSBuild Projects="$(SolutionRoot)\src\MyProjectHelp.shfbproj"
Properties="Configuration=Release;Platform=AnyCPU;OutDir=$(OutDir)" />
</Target>
The Configuration and Platform
properties can be obtained from predefined Team Build properties as well. However, be aware that the help file
builder as well as most Visual Studio projects default to a value of "AnyCPU" for the Platform
property whereas Team Build will use "Any CPU" (with as space) as the default.
See the Building Projects Outside the GUI help topic for details
on building a help file builder project manually from the command line.
The following steps are optional and can be used to deploy the help file. This example assumes
you are deploying website output to a web server.
Add a new web share to your destination server (i.e. the Team Foundation Server). The
following example assumes it is called Code Documentation.
Make sure the folder properties grant full access to the process user running the build
(TFSBuild for example).
Add Index.aspx and/or Index.html to the default
documents for the site.
Place a subfolder within this folder for the project documentation.
Add an AfterDropBuild target to your build script to copy all the
new help files to the web server:
<Target Name="AfterDropBuild">
<!-- Delete old source code docs -->
<CreateItem Include="\\tfsserver\Code Documentation\MyProject\**\*.*">
<Output TaskParameter="Include" ItemName="DocDeployFiles" />
</CreateItem>
<Delete Files="@(DocDeployFiles)" />
<!-- Copy new source code docs to team system -->
<CreateItem Include="$(SolutionRoot)\src\Help\**\*.*"
Exclude="$(SolutionRoot)\src\Help\Working\**\*.*">
<Output TaskParameter="Include" ItemName="NewDocFiles" />
</CreateItem>
<Copy SourceFiles="@(NewDocFiles)"
DestinationFolder="\\tfsserver\Code Documentation\MyProject\%(NewDocFiles.RecursiveDir)" />
</Target>
You do not need the Exclude attribute for the
NewDocFiles property if you set the help file
project's CleanIntermediates property to true.
Check in your build script and run it.
You should now have fresh documentation available every day. You can also set up a separate build
using a different name that allows you to create new documentation during the day without running all the other
items in the daily build. This can be useful if someone adds a lot of new documentation into the code that you
want to make available immediately.