Building .NET 4.0 applications with NAnt
You need to add a new framework configuration which (still?) doesn’t come by default with the download of NAnt. Insert the following into your NAnt.exe.config file (alongside the similar looking framework configurations):
<framework name="net-4.0" family="net" version="4.0" vendor="Microsoft" description="Microsoft .NET Framework 4.0" sdkdirectory="${path::combine(sdkInstallRoot, 'bin')}" frameworkdirectory="${path::combine(installRoot, 'v4.0.30319')}" frameworkassemblydirectory="${path::combine(installRoot, 'v4.0.30319')}" clrversion="4.0.30319"> <runtime> <probing-paths> <directory name="lib/net/2.0" /> <directory name="lib/net/neutral" /> <directory name="lib/common/2.0" /> <directory name="lib/common/neutral" /> </probing-paths> <modes> <strict> <environment> <variable name="COMPLUS_VERSION" value="v4.0.30319" /> </environment> </strict> </modes> </runtime> <reference-assemblies basedir="${path::combine(installRoot, 'v4.0.30319')}"> <include name="Accessibility.dll" /> <include name="mscorlib.dll" /> <include name="Microsoft.Build.Engine.dll" /> <include name="Microsoft.Build.Framework.dll" /> <include name="Microsoft.Build.Utilities.dll" /> <include name="Microsoft.Vsa.dll" /> <include name="Microsoft.VisualBasic.dll" /> <include name="Microsoft.VisualBasic.Compatibility.dll" /> <include name="Microsoft.VisualBasic.Compatibility.Data.dll" /> <include name="System.Configuration.dll" /> <include name="System.Configuration.Install.dll" /> <include name="System.Data.dll" /> <include name="System.Data.OracleClient.dll" /> <include name="System.Data.SqlXml.dll" /> <include name="System.Deployment.dll" /> <include name="System.Design.dll" /> <include name="System.DirectoryServices.dll" /> <include name="System.dll" /> <include name="System.Drawing.Design.dll" /> <include name="System.Drawing.dll" /> <include name="System.EnterpriseServices.dll" /> <include name="System.Management.dll" /> <include name="System.Messaging.dll" /> <include name="System.Runtime.Remoting.dll" /> <include name="System.Runtime.Serialization.Formatters.Soap.dll" /> <include name="System.Security.dll" /> <include name="System.ServiceProcess.dll" /> <include name="System.Transactions.dll" /> <include name="System.Web.dll" /> <include name="System.Web.Mobile.dll" /> <include name="System.Web.RegularExpressions.dll" /> <include name="System.Web.Services.dll" /> <include name="System.Windows.Forms.dll" /> <include name="System.Xml.dll" /> </reference-assemblies> <task-assemblies> <!-- include MS.NET version-neutral assemblies --> <include name="extensions/net/neutral/**/*.dll" /> <!-- include MS.NET 2.0 specific assemblies --> <include name="extensions/net/2.0/**/*.dll" /> <!-- include MS.NET specific task assembly --> <include name="NAnt.MSNetTasks.dll" /> <!-- include MS.NET specific test assembly --> <include name="NAnt.MSNet.Tests.dll" /> <!-- include .NET 2.0 specific assemblies --> <include name="extensions/common/2.0/**/*.dll" /> </task-assemblies> <tool-paths> <directory name="${path::combine(sdkInstallRoot, 'bin')}" if="${property::exists('sdkInstallRoot')}" /> <directory name="${path::combine(installRoot, 'v4.0.30319')}" /> <directory name="${path::combine(installRoot, 'v2.0.50727')}" /> <directory name="${path::combine(installRoot, 'v3.0')}" /> <directory name="${path::combine(installRoot, 'v3.5')}" /> </tool-paths> <project> <readregistry property="installRoot" key="SOFTWARE\Microsoft\.NETFramework\InstallRoot" hive="LocalMachine" /> <readregistry property="sdkInstallRoot" key="SOFTWARE\Microsoft\Microsoft SDKs\Windows\v6.0A\WinSDKNetFxTools\InstallationFolder" hive="LocalMachine" failonerror="false" /> <readregistry property="sdkInstallRoot" key="SOFTWARE\Microsoft\Microsoft SDKs\Windows\v6.1\WinSDK\InstallationFolder" hive="LocalMachine" failonerror="false" /> <readregistry property="sdkInstallRoot" key="SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0\WinSDK\InstallationFolder" hive="LocalMachine" failonerror="false" /> </project> <tasks> <task name="csc"> <attribute name="supportsnowarnlist">true</attribute> <attribute name="supportswarnaserrorlist">true</attribute> <attribute name="supportskeycontainer">true</attribute> <attribute name="supportskeyfile">true</attribute> <attribute name="supportsdelaysign">true</attribute> <attribute name="supportsplatform">true</attribute> <attribute name="supportslangversion">true</attribute> </task> <task name="vbc"> <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="supportsdelaysign">true</attribute> <attribute name="supportsplatform">true</attribute> <attribute name="supportswarnaserrorlist">true</attribute> </task> <task name="jsc"> <attribute name="supportsplatform">true</attribute> </task> <task name="vjc"> <attribute name="supportsnowarnlist">true</attribute> <attribute name="supportskeycontainer">true</attribute> <attribute name="supportskeyfile">true</attribute> <attribute name="supportsdelaysign">true</attribute> </task> <task name="resgen"> <attribute name="supportsassemblyreferences">true</attribute> <attribute name="supportsexternalfilereferences">true</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> </tasks> </framework>
…and you can then set NAnt to use it using
<property name="nant.settings.currentframework" value="net-4.0" />