Building binaries targeting .NET 1.1 and .NET 1.0 in TeamBuild
There are two approaches for building binaries targeting .NET 1.1 and .NET 1.0 in TeamBuild.
Approach# 1
1. Upgrade VS2003/VS2002 project files to VS2005 using VS2005 upgrade wizard.
2. Install the msbuild toolkit from here. This toolkit can build msbuild based projects targeting .NET 1.1 and .NET 1.0. Thanks to Robert MCLaws and Jomo Fisher for building such a great toolkit.
3. Locate the target files installed at %ProgramFiles%\MSBuild\Interscape\MSBuildToolkit
4. Follow the steps mentioned in Jomo’s blog and update each solution file to target .NET 1.1 and .NET 1.0.
5. Choose appropriate configuration (platform as '.NET 1.0' or '.NET 1.1') in team build type.
6. Install this toolkit on build machine.
7. Install .NET1.1 and .NET1.0 redist on build machine if they are already not installed.
8. That’s it, kickoff the build!
You may notice that the build process picked up .NET 1.1/.NET1.0 version of compiler and referenced .NET binaries from buildlog.txt.
(Snippet from my build log file)
Project "d:\builddir2\TestProject\Approach1\Sources\TargetNET1.1\TargetNET11.sln" is building "d:\builddir2\TestProject\Approach1\Sources\TargetNET1.1\TargetNET1.1\TargetNET11.csproj" (default targets):
Target PrepareForBuild:
Creating directory "d:\builddir2\TestProject\Approach1\Binaries\.NET 1.1\Debug\".
Creating directory "obj\.NET 1.1\Debug\".
Target CoreCompile:
D:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Csc.exe /noconfig /warn:4 /define:CODE_ANALYSIS;DEBUG;TRACE;NET11 /reference:D:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Data.dll /reference:D:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.dll /reference:D:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Xml.dll /debug+ /debug:full /optimize- /out:"obj\.NET 1.1\Debug\TargetNET1.1.exe" /target:exe Program.cs Properties\AssemblyInfo.cs
Another beauty is that you can choose to run code analysis also while building these versions. All you need to do is to enable code analysis for this build type J
(Snippet from my build log file)
Target RunCodeAnalysis:
Running Code Analysis...
D:\Program Files\Microsoft Visual Studio 8\Team Tools\Static Analysis Tools\FxCop\FxCopCmd.exe /o:"d:\builddir2\TestProject\Approach1\Binaries\.NET 1.1\Debug\TargetNET1.1.exe.CodeAnalysisLog.xml" /f:"d:\builddir2\TestProject\Approach1\Binaries\.NET 1.1\Debug\TargetNET1.1.exe" /d:"D:\WINDOWS\Microsoft.NET\Framework\v1.1.4322" /r:D:\Program Files\Microsoft Visual Studio 8\Team Tools\Static Analysis Tools\FxCop\\rules
Approach# 2
In case you don’t have an option of upgrading the project files to VS2005, you will need to use devenv command line (devenv.com) of the particular version and build. This works well but one difficulty is: TeamBuild needs the project output redirected to one common output folder in order to upload to the release server later on, but you cannot override the output directory with devenv command line. So, you will need either to modify your project files to use one common output directory, or, you will need to know the output directories of individual projects and use them in TeamBuild script to copy separately.
In the below example, I’ve VS2003Application.sln that contains three projects i) VS2003Application.csproj ii) CSWindowsApp.csproj iii) VBApp.vbproj.
I’ve added the following simple script overriding AfterCompile target in my TfsBuild.proj.
<PropertyGroup>
<VS2003_Devenv>$(ProgramFiles)\Microsoft Visual Studio .NET 2003\Common7\IDE\devenv.com</VS2003_Devenv>
<VS2003_SolutionName>$(SolutionRoot)\vs2003\VS2003Application\VS2003Application.sln</VS2003_SolutionName>
<VS2003_Configuration>Debug</VS2003_Configuration>
</PropertyGroup>
<ItemGroup>
<VS2003_OutputFiles Include="$(SolutionRoot)\vs2003\VS2003Application\bin\$(VS2003_Configuration)\**\*.*"/>
<VS2003_OutputFiles Include="$(SolutionRoot)\vs2003\CSWindowsApp\bin\$(VS2003_Configuration)\**\*.*"/>
<VS2003_OutputFiles Include="$(SolutionRoot)\vs2003\VBApp\bin\**\*.*"/>
</ItemGroup>
<Target Name="AfterCompile">
<Exec Command=""$(VS2003_Devenv)" "$(VS2003_SolutionName)" /build $(VS2003_Configuration)"/>
<MakeDir
Directories="$(BinariesRoot)\$(VS2003_Configuration)"
Condition="!Exists('$(BinariesRoot)\$(VS2003_Configuration)')" />
<Copy
SourceFiles="@(VS2003_OutputFiles)"
DestinationFiles="@(VS2003_OutputFiles->'$(BinariesRoot)\$(VS2003_Configuration)\%(RecursiveDir)%(Filename)%(Extension)')"
/>
</Target>
Couple of things to notice here:
This assumes VS 2003 is installed on the build machine.
I’m using devenv.com, not devenv.exe.
You can extend this to build any number of solutions and different configurations. And, this can be easily modified to target VS 2002. Hope, this will provide you a starting point. Let me know if you need any further help.
Namaste!
Comments
Anonymous
February 08, 2006
The following is my official VSTS jumpstart kit.&nbsp; I will maintain this post entry going forward....Anonymous
February 08, 2006
Internet Links
Visual Studio Team System Home
Getting Started with Team Foundation
MSDN Technical...Anonymous
February 22, 2006
Administration
What is the procedure to backup/restore Team Foundation Server?
See Buck Hodges’ MSDN...Anonymous
October 25, 2006
The following are some different resources to either convert your Visual Studio 2002/2003 projects toAnonymous
January 23, 2007
PingBack from http://www.vsts.or.kr/blog/?p=9Anonymous
February 03, 2007
I have been working with TFS for quite a long time now and has come across a lot of situations where...Anonymous
February 08, 2007
Configuration and Management of Team Foundation Server http://msdn.microsoft.com/vstudio/teamsystem/team/quickstarts/configure/default.aspxAnonymous
March 27, 2007
I recently had to customize a Team Build script to build only one VS2003 solution and found that Nagaraju...Anonymous
March 30, 2007
一個常問的問題是, 什麼是 MSBuild ? , 什麼是 TeamBuild ? 簡單來說, MSBuild 才是微軟在 建構管理中的核心技術引擎, Team Build 則是 Team FoundationAnonymous
April 04, 2007
MSBuild Extras – Toolkit for .NET 1.1 “MSBee” is an addition to MSBuild that allows developers to buildAnonymous
December 10, 2007
Building non-MSBuild projects is possible. For example you have to build VS2003, Installer, C++, Delphi