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=”SOFTWARE\Microsoft\.NETFramework\InstallRoot”

hive=”LocalMachine” />

                        <readregistry

property=”sdkInstallRoot”

key=”SOFTWARE\Microsoft\.NETFramework\sdkInstallRootv2.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.

This entry was posted in Uncategorized. Bookmark the permalink. Follow any comments here with the RSS feed for this post.

14 Responses to Upgrade NAnt for use with VS2008 solutions and .Net 3.5

  1. Jesper H. says:

    It looks like Nant 0.86-beta1 supports MS framework 3.5 except for the task.

    http://nant.sourceforge.net/release/0.86-beta1/releasenotes.html

  2. Diego C. says:

    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 ‘pathToSolution\name.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

  3. Nicolas Jeanne says:

    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!

  4. Nicolas Jeanne says:

    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

  5. Nicolas Jeanne says:

    net Framework 2.0 & 3.5 are installed

  6. Nicolas Jeanne says:

    the .Net Framework is intalled on my pc

  7. Nicolas Jeanne says:

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

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

  9. Nicolas Jeanne says:

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

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

  10. James Curran says:

    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 Framework\v2.0.50727 folder to the Framework\v3.5 folder

  11. a Roma Tomato says:

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

  12. Tim Barcz says:

    thanks for the bail out Jeff, this works great!

  13. Bil Simser says:

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

  14. Kevin Miller says:

    It looks like the nightly release for NAnt (a.k.a. .86 beta 1) supports .Net 3.5.

    http://nant.sourceforge.net/nightly/latest/releasenotes.html

Leave a Reply