2012-08-07 29 views
16

Tengo curiosidad si es posible usar Nant para apuntar al .NET 4.5 utilizando el compilador C# 5.0. A partir de ahora, la última versión solo indica compatibilidad con .NET 4.0.Creación de proyectos .NET 4.5 con Nant

Intenté descargar la fuente y construir .sln con msbuild después de instalar el .NET 4.5 framework, pero eso produjo una gran cantidad de errores.

+0

Estoy un poco confundido ya que C# 5.0 es parte de .NET 4.5 Framework. Si instaló .NET 4.5, ¿no puede usar msbuild para compilar? –

+1

Sí, definitivamente puede usar MSBuild ... en Windows. Pero si está creando un proyecto Mono en Linux o MacOS, entonces MSBuild no estará disponible :) –

+1

He agregado un fragmento del archivo de configuración que me funciona. – skolima

Respuesta

25

Podría ser mejor para golpear NAnt mailing list con sus conclusiones. No es tan activo, pero NAnt definitivamente recibirá una actualización para apoyar el nuevo marco. El problema es que Microsoft generalmente cambia las ubicaciones de los archivos con una nueva versión y las claves de registro que apuntan a esos archivos también cambian, por lo que no es posible admitirlo antes de que haya una versión real de Microsoft. para las pruebas.

Lo tengo funcionando actualmente, con una orientación de 4.5. En NAnt.exe.config, cambiar el <startup> nodo:

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

También he añadido un nuevo <framework> nodo (copia de net-4,0 exclusión de conjuntos de referencia):

<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

Mi empresa tiene un sistema de compilación antiguo que usa NAnt. ¿Hay una versión actualizada para 4.6? C# 6 no se compila correctamente con la versión 4.5. (No hace falta decir que estoy presionando para un nuevo proceso de compilación, pero puede llevar un tiempo migrar todo). – WillC

2

NANT ha lanzado 0.92, entonces no está muerto Sin embargo, no tengo idea de cuándo aparecerán en csc 5.0.

Como usted mencionó la construcción de Mono en su entorno nativo como su verdadera preocupación, el Proyecto Mono tiene su propio clon de msbuild, llamado xbuild (http://www.mono-project.com/Microsoft.Build). Dicen que no está completa al 100%, pero no dan detalles. Supongo que, a menos que esté haciendo algo por ahí, probablemente funcione. Recomendaría simplemente intentar invocar xbuild desde la línea de comandos y pasando la solución como una primera prueba rápida de humo.

Saludos, Michael

Cuestiones relacionadas