2012-08-07 100 views
16

我很好奇如果可以使用Nant來使用C#5.0編譯器來定位.NET 4.5。截至目前,最新版本僅支持.NET 4.0。使用Nant構建.NET 4.5項目

我嘗試在安裝.net 4.5框架後下載源代碼並使用msbuild構建.sln,但這樣會產生大量錯誤。

+0

我有點困惑,因爲C#5.0是.NET 4.5 Framework的一部分。如果你安裝了.NET 4.5,你不能使用msbuild來編譯? – 2012-08-07 16:57:11

+1

是的,你絕對可以在Windows上使用MSBuild ...。但是,如果你正在Linux或MacOS上構建Mono項目,那麼MSBuild將不可用:) – 2012-08-08 02:46:47

+1

我已經添加了一個配置文件中適用於我的片段。 – skolima 2012-09-04 10:41:37

回答

25

可能最好打NAnt mailing list與你的發現。它並不是那麼活躍,但NAnt肯定會得到一個支持新框架的更新。問題在於,微軟通常會使用新版本和註冊表鍵來更改文件位置,指向這些文件也會發生變化,所以在Microsoft發佈實際版本之前無法支持它。進行測試。

我目前正在運行,目標爲4.5。在NAnt.exe.config,改變<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> 

我還添加了一個新的<framework>節點(的淨4.0副本除了參考組件):

<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

我的公司有一個使用NAnt的舊版本系統。是否有4.6的更新版本?使用4.5版本時,C#6無法正確構建。 (不用說,我正在推動一個新的構建過程,但可能需要一段時間才能將所有內容遷移)。 – WillC 2016-04-27 12:40:46

2

楠已經發布了0.92,所以它沒有死。不知道他們什麼時候能參加csc 5.0。

由於您提到在本機環境中構建Mono作爲您的實際關注點,Mono Project具有自己的msbuild克隆,名爲xbuild(http://www.mono-project.com/Microsoft.Build)。他們說這不是100%功能完整,但不要提供任何細節。我猜測,除非你正在做某件事,否則它可能會奏效。我建議僅僅嘗試從命令行調用xbuild並將該解決方案作爲第一個快速煙測試傳遞。

問候,邁克爾