我很好奇如果可以使用Nant来使用C#5.0编译器来定位.NET 4.5。截至目前,最新版本仅支持.NET 4.0。使用Nant构建.NET 4.5项目
我尝试在安装.net 4.5框架后下载源代码并使用msbuild构建.sln,但这样会产生大量错误。
我很好奇如果可以使用Nant来使用C#5.0编译器来定位.NET 4.5。截至目前,最新版本仅支持.NET 4.0。使用Nant构建.NET 4.5项目
我尝试在安装.net 4.5框架后下载源代码并使用msbuild构建.sln,但这样会产生大量错误。
可能最好打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>
我的公司有一个使用NAnt的旧版本系统。是否有4.6的更新版本?使用4.5版本时,C#6无法正确构建。 (不用说,我正在推动一个新的构建过程,但可能需要一段时间才能将所有内容迁移)。 – WillC 2016-04-27 12:40:46
楠已经发布了0.92,所以它没有死。不知道他们什么时候能参加csc 5.0。
由于您提到在本机环境中构建Mono作为您的实际关注点,Mono Project具有自己的msbuild克隆,名为xbuild(http://www.mono-project.com/Microsoft.Build)。他们说这不是100%功能完整,但不要提供任何细节。我猜测,除非你正在做某件事,否则它可能会奏效。我建议仅仅尝试从命令行调用xbuild并将该解决方案作为第一个快速烟测试传递。
问候,迈克尔
我有点困惑,因为C#5.0是.NET 4.5 Framework的一部分。如果你安装了.NET 4.5,你不能使用msbuild来编译? – 2012-08-07 16:57:11
是的,你绝对可以在Windows上使用MSBuild ...。但是,如果你正在Linux或MacOS上构建Mono项目,那么MSBuild将不可用:) – 2012-08-08 02:46:47
我已经添加了一个配置文件中适用于我的片段。 – skolima 2012-09-04 10:41:37