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.

14 comments

  1. Great tip and good timing! I used this at my talk yesterday on source control!

  2. thanks for the bail out Jeff, this works great!

  3. a Roma Tomato

    Thanks a million, Jeff! This post was very helpful.

  4. I did something similar a while back (for .net3.5 Beta 2), but to get that to work, I had to copy to SYstem.dll file from the Frameworkv2.0.50727 folder to the Frameworkv3.5 folder

  5. Nicolas Jeanne

    I’m sorry but in my case it doesn’t work!

    i’ve got an error with the sdkInstallRoot, please help me!

  6. @Nicolas,
    Several folks have solved this problem by installing the .Net 2.0 SDK.

  7. Nicolas Jeanne

    Maybe but for this project i want and i need to work with the .Net Framework 3.5

  8. Nicolas Jeanne

    the .Net Framework is intalled on my pc

  9. Nicolas Jeanne

    net Framework 2.0 & 3.5 are installed

  10. Nicolas Jeanne

    when i use Nant 0.85 and i add this code, when i try Nant it says to me :
    invalid element . Unknown task or datatype!
    Can somebody help me?
    please

  11. Nicolas Jeanne

    sorry I didn’t add NantContrib elements in Nant, but now it says to me that : Visual Studio solution version ‘10.0’ is not supported!

  12. Diego C.

    I did the change on nant.exe.config but apparently the problem lies on the “solution” task. As soon as it reads my solution file with the “Microsoft Visual Studio Solution File, Format Version 10.00” in the first line, it throws an error: Nant.Core.BuildException: Solution of file ‘pathToSolutionname.sln’ is not supported. I tried running with Nant 0.85 and .086 and I still nothing. However, v 0.86 does include the necessary entries in the nant config file for .net 3.5 . From the Nant 0.86 release notes:

    .NET Framework 3.5

    Support for targeting .NET Framework 3.5 and Mono 3.5 Profile is now available.

    Note: this does not apply to the task.

    Does anybody knows a work around?

    Thanks

Comments are closed.