Joel Martinez
Joel Martinez

Reputation: 47749

Building .NET 4.5 Projects with Nant

I'm curious if it's possible to use Nant to target the .NET 4.5 using the C# 5.0 compiler. As of right now, the latest version only states support for .NET 4.0.

I tried downloading the source and building the .sln with msbuild after installing the .net 4.5 framework, but that yielded a large number of errors.

Upvotes: 18

Views: 12000

Answers (2)

skolima
skolima

Reputation: 32684

Might be best to hit NAnt mailing list with your findings. It's not that active, but NAnt will definitely get an update to support the new framework. Problem is, Microsoft usually changes file locations with new release and registry keys pointing to those files change as well, so it's not really possible to support it before there's an actual release from Microsoft. for tests.

I have it running currently, targeting 4.5. In NAnt.exe.config, change the <startup> node:

<startup>
    <!-- .NET Framework 4.5 -->
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
    <!-- .NET Framework 4.0 -->
    <supportedRuntime version="v4.0.30319" />
    <!-- .NET Framework 2.0 -->
    <supportedRuntime version="v2.0.50727" />
</startup>

I've also added a new <framework> node (copy of net-4.0 except for reference assemblies):

<framework
    name="net-4.5"
    family="net"
    version="4.5"
    description="Microsoft .NET Framework 4.5"
    sdkdirectory="${sdkInstallRoot}"
    frameworkdirectory="${path::combine(installRoot, 'v4.0.30319')}"
    frameworkassemblydirectory="${path::combine(installRoot, 'v4.0.30319')}"
    clrversion="4.0.30319"
    clrtype="Desktop"
    vendor="Microsoft"
      >
  <runtime>
    <probing-paths>
      <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="Microsoft.Build.Conversion.v4.0.dll" />
    <include name="Microsoft.Build.dll" />
    <include name="Microsoft.Build.Engine.dll" />
    <include name="Microsoft.Build.Framework.dll" />
    <include name="Microsoft.Build.Tasks.v4.0.dll" />
    <include name="Microsoft.Build.Utilities.v4.0.dll" />
    <include name="Microsoft.CSharp.dll" />
    <include name="Microsoft.Data.Entity.Build.Tasks.dll" />
    <include name="Microsoft.JScript.dll" />
    <include name="Microsoft.Transactions.Bridge.dll" />
    <include name="Microsoft.Transactions.Bridge.Dtc.dll" />
    <include name="Microsoft.VisualBasic.Activities.Compiler.dll" />
    <include name="Microsoft.VisualBasic.Compatibility.Data.dll" />
    <include name="Microsoft.VisualBasic.Compatibility.dll" />
    <include name="Microsoft.VisualBasic.dll" />
    <include name="Microsoft.VisualC.dll" />
    <include name="Microsoft.VisualC.STLCLR.dll" />
    <include name="mscorlib.dll" />
    <include name="System.Activities.Core.Presentation.dll" />
    <include name="System.Activities.dll" />
    <include name="System.Activities.DurableInstancing.dll" />
    <include name="System.Activities.Presentation.dll" />
    <include name="System.AddIn.Contract" />
    <include name="System.AddIn.dll" />
    <include name="System.ComponentModel.Composition.dll" />
    <include name="System.ComponentModel.DataAnnotations.dll" />
    <include name="System.Configuration.dll" />
    <include name="System.Configuration.Install.dll" />
    <include name="System.Core.dll" />
    <include name="System.Data.DataSetExtensions.dll" />
    <include name="System.Data.dll" />
    <include name="System.Data.Entity.Design.dll" />
    <include name="System.Data.Entity.dll" />
    <include name="System.Data.Linq.dll" />
    <include name="System.Data.OracleClient.dll" />
    <include name="System.Data.Services.Client.dll" />
    <include name="System.Data.Services.Design.dll" />
    <include name="System.Data.Services.dll" />
    <include name="System.Data.SqlXml.dll" />
    <include name="System.Deployment.dll" />
    <include name="System.Design.dll" />
    <include name="System.Device.dll" />
    <include name="System.DirectoryServices.dll" />
    <include name="System.DirectoryServices.Protocols.dll" />
    <include name="System.dll" />
    <include name="System.Drawing.Design.dll" />
    <include name="System.Drawing.dll" />
    <include name="System.Dynamic.dll" />
    <include name="System.EnterpriseServices.dll" />
    <include name="System.EnterpriseServices.Thunk.dll" />
    <include name="System.EnterpriseServices.Wrapper.dll" />
    <include name="System.IdentityModel.dll" />
    <include name="System.IdentityModel.Selectors.dll" />
    <include name="System.IO.Log.dll" />
    <include name="System.Management.dll" />
    <include name="System.Management.Instrumentation.dll" />
    <include name="System.Messaging.dll" />
    <include name="System.Net.dll" />
    <include name="System.Numerics.dll" />
    <include name="System.Runtime.Caching.dll" />
    <include name="System.Runtime.DurableInstancing.dll" />
    <include name="System.Runtime.Remoting.dll" />
    <include name="System.Runtime.Serialization.dll" />
    <include name="System.Runtime.Serialization.Formatters.Soap.dll" />
    <include name="System.Security.dll" />
    <include name="System.ServiceModel.Activation.dll" />
    <include name="System.ServiceModel.Activities.dll" />
    <include name="System.ServiceModel.Channels.dll" />
    <include name="System.ServiceModel.Discovery.dll" />
    <include name="System.ServiceModel.dll" />
    <include name="System.ServiceModel.Routing.dll" />
    <include name="System.ServiceModel.ServiceMoniker40.dll" />
    <include name="System.ServiceModel.WasHosting.dll" />
    <include name="System.ServiceModel.Web.dll" />
    <include name="System.ServiceProcess.dll" />
    <include name="System.Transactions.dll" />
    <include name="System.Web.Abstractions.dll" />
    <include name="System.Web.ApplicationServices.dll" />
    <include name="System.Web.DataVisualization.Design.dll" />
    <include name="System.Web.DataVisualization.dll" />
    <include name="System.Web.dll" />
    <include name="System.Web.DynamicData.Design.dll" />
    <include name="System.Web.DynamicData.dll" />
    <include name="System.Web.Entity.Design.dll" />
    <include name="System.Web.Entity.dll" />
    <include name="System.Web.Extensions.Design.dll" />
    <include name="System.Web.Extensions.dll" />
    <include name="System.Web.Mobile.dll" />
    <include name="System.Web.RegularExpressions.dll" />
    <include name="System.Web.Routing.dll" />
    <include name="System.Web.Services.dll" />
    <include name="System.Windows.Forms.DataVisualization.Design.dll" />
    <include name="System.Windows.Forms.DataVisualization.dll" />
    <include name="System.Windows.Forms.dll" />
    <include name="System.Workflow.Activities.dll" />
    <include name="System.Workflow.ComponentModel.dll" />
    <include name="System.Workflow.Runtime.dll" />
    <include name="System.WorkflowServices.dll" />
    <include name="System.Xaml.dll" />
    <include name="System.Xaml.Hosting.dll" />
    <include name="System.Xml.dll" />
    <include name="System.Xml.Linq.dll" />
  </reference-assemblies>
  <!-- WPF Assemblies -->
  <reference-assemblies basedir="${path::combine(installRoot, 'v4.0.30319')}/WPF">
    <include name="NaturalLanguage6.dll" />
    <include name="NlsData0009.dll" />
    <include name="NlsLexicons0009.dll" />
    <include name="PenIMC.dll" />
    <include name="PresentationCore.dll" />
    <include name="PresentationFramework.Aero.dll" />
    <include name="PresentationFramework.Classic.dll" />
    <include name="PresentationFramework.dll" />
    <include name="PresentationFramework.Luna.dll" />
    <include name="PresentationFramework.Royale.dll" />
    <include name="PresentationHost_v0400.dll" />
    <include name="PresentationNative_v0400.dll" />
    <include name="PresentationUI.dll" />
    <include name="ReachFramework.dll" />
    <include name="System.Printing.dll" />
    <include name="System.Speech.dll" />
    <include name="System.Windows.Input.Manipulations.dll" />
    <include name="System.Windows.Presentation.dll" />
    <include name="UIAutomationClient.dll" />
    <include name="UIAutomationClientsideProviders.dll" />
    <include name="UIAutomationProvider.dll" />
    <include name="UIAutomationTypes.dll" />
    <include name="WindowsBase.dll" />
    <include name="WindowsFormsIntegration.dll" />
    <include name="wpfgfx_v0400.dll" />
    <include name="wpftxt_v0400.dll" />
  </reference-assemblies>
  <reference-assemblies basedir="${environment::get-folder-path('ProgramFiles')}/Reference Assemblies/Microsoft/Framework/.NETFramework/v4.5">
    <include name="Microsoft.Build.Conversion.v4.0.dll" />
    <include name="Microsoft.Build.dll" />
    <include name="Microsoft.Build.Engine.dll" />
    <include name="Microsoft.Build.Framework.dll" />
    <include name="Microsoft.Build.Tasks.v4.0.dll" />
    <include name="Microsoft.Build.Utilities.v4.0.dll" />
    <include name="Microsoft.CSharp.dll" />
    <include name="Microsoft.JScript.dll" />
    <include name="Microsoft.VisualBasic.Compatibility.Data.dll" />
    <include name="Microsoft.VisualBasic.Comptatibility.dll" />
    <include name="Microsoft.VisualBasic.dll" />
    <include name="Microsoft.VisualC.dll" />
    <include name="Microsoft.VisualC.STLCLR.dll" />
    <include name="mscorlib.dll" />
    <include name="PresentationBuildTasks.dll" />
    <include name="PresentationCore.dll" />
    <include name="WindowsBase.dll" />
    <include name="PresentationFramework.dll" />
    <include name="PresentationFramework.Aero.dll" />
    <include name="PresentationFramework.Classic.dll" />
    <include name="PresentationFramework.Luna.dll" />
    <include name="PresentationFramework.Royale.dll" />
    <include name="ReachFramework.dll" />
    <include name="System.Activities.Core.Presentation.dll" />
    <include name="System.Activities.dll" />
    <include name="System.Activities.DurableInstancing.dll" />
    <include name="System.Activities.Presentation.dll" />
    <include name="System.AddIn.Contract.dll" />
    <include name="System.AddIn.dll" />
    <include name="System.ComponentModel.Composition.dll" />
    <include name="System.ComponentModel.DataAnnotations.dll" />
    <include name="System.Configuration.dll" />
    <include name="System.Core.dll" />
    <include name="System.Data.DataSetExtension.dll" />
    <include name="System.Data.dll" />
    <include name="System.Data.Entity.Design.dll" />
    <include name="System.Data.Entity.dll" />
    <include name="System.Data.Linq.dll" />
    <include name="System.Data.OracleClient.dll" />
    <include name="System.Data.Services.Client.dll" />
    <include name="System.Data.Services.Design.dll" />
    <include name="System.Data.Services.dll" />
    <include name="System.Data.SqlXml.dll" />
    <include name="System.Deployment.dll" />
    <include name="System.Design.dll" />
    <include name="System.Device.dll" />
    <include name="System.DirectoryServices.AccountManagement.dll" />
    <include name="System.DirectoryServices.dll" />
    <include name="System.DirectoryServices.Protocols.dll" />
    <include name="System.dll" />
    <include name="System.Drawing.Design.dll" />
    <include name="System.Drawing.dll" />
    <include name="System.EnterpriseServices.dll" />
    <include name="System.EnterpriseServices.Thunk.dll" />
    <include name="System.EnterpriseServices.Wrapper.dll" />
    <include name="System.IdentityModel.dll" />
    <include name="System.IdentityModel.Selectors.dll" />
    <include name="System.IO.Log.dll" />
    <include name="System.Management.dll" />
    <include name="System.Management.Instrumentation.dll" />
    <include name="System.Messaging.dll" />
    <include name="System.Net.dll" />
    <include name="System.Numerics.dll" />
    <include name="System.Printing.dll" />
    <include name="System.Runtime.Caching.dll" />
    <include name="System.Runtime.DurableInstancing.dll" />
    <include name="System.Runtime.Remoting.dll" />
    <include name="System.Runtime.Serialization.dll" />
    <include name="System.Runtime.Serialization.Formatters.Soap.dll" />
    <include name="System.Security.dll" />
    <include name="System.ServiceModel.Activation.dll" />
    <include name="System.ServiceModel.Activities.dll" />
    <include name="System.ServiceModel.Channels.dll" />
    <include name="System.ServiceModel.Discovery.dll" />
    <include name="System.ServiceModel.dll" />
    <include name="System.ServiceModel.Routing.dll" />
    <include name="System.ServiceModel.Web.dll" />
    <include name="System.ServiceProcess.dll" />
    <include name="System.Speech.dll" />
    <include name="System.Transactions.dll" />
    <include name="System.Web.Abstractions.dll" />
    <include name="System.Web.ApplicationServices.dll" />
    <include name="System.Web.DataVisualization.Design.dll" />
    <include name="System.Web.DataVisualization.dll" />
    <include name="System.Web.dll" />
    <include name="System.Web.DynamicData.Design.dll" />
    <include name="System.Web.DynamicData.dll" />
    <include name="System.Web.Entity.Design.dll" />
    <include name="System.Web.Entity.dll" />
    <include name="System.Web.Extensions.Design.dll" />
    <include name="System.Web.Extensions.dll" />
    <include name="System.Web.Mobile.dll" />
    <include name="System.Web.RegularExpressions.dll" />
    <include name="System.Web.Routing.dll" />
    <include name="System.Web.Services.dll" />
    <include name="System.Windows.Forms.DataVisualization.Design.dll" />
    <include name="System.Windows.Forms.DataVisualization.dll" />
    <include name="System.Windows.Forms.dll" />
    <include name="System.Windows.Input.Manipulations.dll" />
    <include name="System.Windows.Presentation.dll" />
    <include name="System.Workflow.Activities.dll" />
    <include name="System.Workflow.ComponentModel.dll" />
    <include name="System.Workflow.Runtime.dll" />
    <include name="System.WorkflowServices.dll" />
    <include name="System.Xaml.dll" />
    <include name="System.Xml.dll" />
    <include name="System.Xml.Linq.dll" />
  </reference-assemblies>
  <task-assemblies>
    <!-- include MS.NET version-neutral assemblies -->
    <include name="extensions/net/neutral/**/*.dll" />
    <!-- include MS.NET 4.0 specific assemblies -->
    <include name="extensions/net/4.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 4.0 specific assemblies -->
    <include name="extensions/common/4.0/**/*.dll" />
  </task-assemblies>
  <tool-paths>
    <directory name="${sdkInstallRoot}"
        if="${property::exists('sdkInstallRoot')}" />
    <directory name="${path::combine(installRoot, 'v4.0.30319')}" />
  </tool-paths>
  <project>
    <readregistry
        property="installRoot"
        key="SOFTWARE\Microsoft\.NETFramework\InstallRoot"
        hive="LocalMachine" />
    <locatesdk property="sdkInstallRoot" minwinsdkver="v7.0A" minnetfxver="4.0" maxnetfxver="4.0.99999" 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>

Upvotes: 27

Michael
Michael

Reputation: 446

nAnt has released 0.92, so it's not dead. No idea though about when they'll get on csc 5.0.

Since you mentioned building Mono in it's native environment as your actual concern, the Mono Project has it's own msbuild clone, called xbuild (http://www.mono-project.com/Microsoft.Build). They say it's not 100% feature complete, but don't give nay details. I'm guessing, unless you're doing something way out there, it will probably work. I would recommend simply trying to invoke xbuild from the commandline and passing the solution as a first, quick smoke-test.

Regards, Michael

Upvotes: 2

Related Questions