Upgrade NAnt for use with VS2008 solutions and .Net 3.5

Unfortunately, we don’t have a .Net 3.5-compatible NAnt distribution yet, but it’s trivial to get the latest version (.85) working with .Net 3.5 and a Visual Studio 2008 solution.  Open up you nant.exe config file, and add the following framework node just below your net-2.0 node.  Not much of a change, and it’s working well for me.

 

                <framework

name=”net-3.5″

family=”net”

version=”3.5″

description=”Microsoft .NET Framework 3.5″

runtimeengine=””

sdkdirectory=”${path::combine(sdkInstallRoot, ‘bin’)}”

frameworkdirectory=”${path::combine(installRoot, ‘v3.5’)}”

frameworkassemblydirectory=”${path::combine(installRoot, ‘v2.0.50727’)}”

clrversion=”2.0.50727″

                    >

                    <task-assemblies>

                        <!– include .NET specific assemblies –>

                        <include name=”tasks/net/*.dll” />

                        <!– include .NET 2.0 specific assemblies –>

                        <include name=”tasks/net/2.0/**/*.dll” />

                        <!– include Microsoft.NET specific task assembly –>

                        <include name=”NAnt.MSNetTasks.dll” />

                        <!– include Microsoft.NET specific test assembly –>

                        <include name=”NAnt.MSNet.Tests.dll” />

                    </task-assemblies>

                    <project>

                        <readregistry

property=”installRoot”

key=”SOFTWAREMicrosoft.NETFrameworkInstallRoot”

hive=”LocalMachine” />

                        <readregistry

property=”sdkInstallRoot”

key=”SOFTWAREMicrosoft.NETFrameworksdkInstallRootv2.0″

hive=”LocalMachine”

failonerror=”false” />

                    </project>

                    <tasks>

                        <task name=”csc”>

                            <attribute name=”exename”>csc</attribute>

                            <attribute name=”supportsnowarnlist”>true</attribute>

                            <attribute name=”supportswarnaserrorlist”>true</attribute>

                            <attribute name=”supportskeycontainer”>true</attribute>

                            <attribute name=”supportskeyfile”>true</attribute>

                            <attribute name=”supportsplatform”>true</attribute>

                            <attribute name=”supportslangversion”>true</attribute>

                        </task>

                        <task name=”vbc”>

                            <attribute name=”exename”>vbc</attribute>

                            <attribute name=”supportsdocgeneration”>true</attribute>

                            <attribute name=”supportsnostdlib”>true</attribute>

                            <attribute name=”supportsnowarnlist”>true</attribute>

                            <attribute name=”supportskeycontainer”>true</attribute>

                            <attribute name=”supportskeyfile”>true</attribute>

                            <attribute name=”supportsplatform”>true</attribute>

                            <attribute name=”supportswarnaserrorlist”>true</attribute>

                        </task>

                        <task name=”jsc”>

                            <attribute name=”exename”>jsc</attribute>

                            <attribute name=”supportsplatform”>true</attribute>

                        </task>

                        <task name=”vjc”>

                            <attribute name=”exename”>vjc</attribute>

                            <attribute name=”supportsnowarnlist”>true</attribute>

                            <attribute name=”supportskeycontainer”>true</attribute>

                            <attribute name=”supportskeyfile”>true</attribute>

                        </task>

                        <task name=”resgen”>

                            <attribute name=”exename”>resgen</attribute>

                            <attribute name=”supportsassemblyreferences”>true</attribute>

                            <attribute name=”supportsexternalfilereferences”>true</attribute>

                        </task>

                        <task name=”al”>

                            <attribute name=”exename”>al</attribute>

                        </task>

                        <task name=”delay-sign”>

                            <attribute name=”exename”>sn</attribute>

                        </task>

                        <task name=”license”>

                            <attribute name=”exename”>lc</attribute>

                            <attribute name=”supportsassemblyreferences”>true</attribute>

                        </task>

                        <task name=”ilasm”>

                            <attribute name=”exename”>ilasm</attribute>

                        </task>

                        <task name=”ildasm”>

                            <attribute name=”exename”>ildasm</attribute>

                        </task>

                    </tasks>

                </framework>

Next, change the following in your NAnt build:

<property name=”nant.settings.currentframework” value=”net-3.5″ />

Now you are off to the races.  If you have any differing experiences, please let me know.