If you’ve tried to build a BIDS project in a team build, you’ve noticed that BIDS doesn’t support MSBuild. There are a couple of workarounds for this.
- Find MSBuild extensions for the various BIDS projects. They’re out there.
- Run the build through Visual Studio—a “DevEnv” build.
I chose the second option. I downloaded the latest Community TFS Build Extensions and followed the instructions to add the activities to the workflow and the toolbox. The activity I cared about was the “VSDevEnv” activity, and that’s in the TfsBuildExtensions.Activities.dll assembly. I added it to a new tab called “Team Build Contributions” (VSDevEnv is the fourth activity):
I copied the DefaultTemplate.xaml file into a DevEnvTemplate.xaml. You can navigate down to a subworkflow called “Process > Sequence > Run on Agent > Try Compile and Test > For Each Configuration > Compile and Test > if Build Settings … > For Each Project … > Try to Compile … > Compile the Project”. In it, there is an option called “Run MSBuild for Project”. I removed the “Run MSBuild for Project” activity shown below:
and I replaced it with the “VSDevEnv” extension activity. I added the “Copy Directory” activity, since the MSBuild activity copies the binaries to a drop and the VSDevEnv activity doesn’t. You can see the new flow in the picture below:
I added the BIDS DevEnv path to my global “path” variable on the system, but you can add it to the user path on the build server. I also tagged the build server with “BIDS08” to direct the build to a machine that could support that build.
I had to set the input path—”localProject” already had the name of the file I was trying to build; set it to the project if you can rather than the solution.
The “OutputFile” is the log file from the build. I set that to outputDirectory + "\" + System.IO.Path.GetFileName(localProject) + ".log".
For “CopyDirectory”, I used BinariesDirectory as the Destination, and I used System.IO.Path.GetDirectoryName(localProject) + "\bin\" as the input directory.
At the end, I had all four of my Analysis Service build assets in the drop folder. Hopefully, I can tackle deployment in another post.