2012-08-07 73 views
16

Sono curioso di sapere se è possibile utilizzare Nant per utilizzare .NET 4.5 con il compilatore C# 5.0. A partire da ora, l'ultima versione afferma solo il supporto per .NET 4.0.Creazione di progetti .NET 4.5 con Nant

Ho provato a scaricare l'origine e a creare il file .sln con msbuild dopo aver installato il framework .net 4.5, ma questo ha prodotto un numero elevato di errori.

+0

Sono un po 'confuso dato che C# 5.0 fa parte di .NET 4.5 Framework. Se hai installato .NET 4.5, non puoi usare msbuild per compilare? –

+1

Sì, si può assolutamente usare MSBuild ... su Windows. Ma se stai costruendo un progetto Mono su Linux o MacOS, MSBuild non sarà disponibile :) –

+1

Ho aggiunto uno snippet dal file di configurazione che funziona per me. – skolima

risposta

25

Potrebbe essere meglio premere NAnt mailing list con i risultati. Non è così attivo, ma NAnt otterrà sicuramente un aggiornamento per supportare il nuovo framework. Il problema è che Microsoft di solito cambia le posizioni dei file con nuove release e le chiavi di registro che puntano anche a quei file, quindi non è possibile supportarlo prima che ci sia una vera e propria release di Microsoft. per i test.

L'ho attualmente in esecuzione, il targeting 4.5. In NAnt.exe.config, modificare il nodo <startup>:

<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> 

Ho anche aggiunto un nuovo <framework> nodo (copia di net-4.0 tranne che per le assemblee di riferimento):

<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> 
+1

La mia azienda ha un vecchio sistema di build che sta utilizzando NAnt. Esiste una versione aggiornata per 4.6? C# 6 non crea correttamente con la versione 4.5. (Inutile dire che sto spingendo per un nuovo processo di compilazione ma potrebbe volerci un po 'di tempo per migrare tutto). – WillC

2

Nant ha rilasciato 0.92, quindi non è morto. Non ho idea di quando arriveranno su csc 5.0.

Dal momento che hai menzionato la costruzione di Mono nel suo ambiente nativo come la tua preoccupazione, il Progetto Mono ha il proprio clone di msbuild, chiamato xbuild (http://www.mono-project.com/Microsoft.Build). Dicono che non è completo al 100%, ma non dare dettagli. Suppongo che, a meno che tu non stia facendo qualcosa di strano, probabilmente funzionerà. Vorrei semplicemente provare a invocare xbuild dalla riga di comando e passare la soluzione come primo test rapido per il fumo.

Cordiali saluti, Michael