用Nant构build.NET 4项目

如何才能构build面向.NET 4.0 Framework的项目?

2010年4月15日…在.net 4和vs2010发布之后,更新Eugene上面的正确答案。

我下载了vs2010和.net 4运行时。 生产版本似乎是v4.30319 ie(C:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319)

在审查http://paigecsharp.blogspot.com/2009/08/nant-net-framework-40-configuration.html后 ,我粘贴了文本,并将所有文本从v4.0.20506更改为v4.30319添加了文本到NAnt.exe.config。

然后我更新了我的脚本

<property name="nant.settings.currentframework" value="net-4.0" />, 

这使得我的项目nant脚本使用.net 4编译器

这让我不能用.net 4二进制构build….

更新2010-06-14:上面的答案是nant-0.85,我升级到nant-0.90,并且必须添加vendor="Microsoft"到添加到nants config的框架属性。 此外,它看起来像nant0.9发现.net库的不同,因为我不得不像这样添加到我的nant build.xml …

 <property name="framework-get-assembly-directory" value="${framework::get-assembly-directory('net-4.0')}" /> <property name="dotNetReferenceAssemblyPath" value="${framework-get-assembly-directory}\" /> 

 <include name="${dotNetReferenceAssemblyPath}System.ComponentModel.DataAnnotations.dll" /> 

如果您想使用nant来构build以.NET 4.0为目标的项目,则必须修改NAnt.exe.config并添加net-4.0目标框架,然后将<supportedRuntime ... />行添加到<startup >部分。

这与这些问题很相似:

使用NAnt的<msbuild>任务或msbuild.exe?

另一种select是直接从块中调用MSBuild。

 <property name="MSBuildPath" value="C:\WINDOWS\Microsoft.NET\Framework\v4.0\MSBuild.exe" /> <target name="build"> <exec program="${MSBuildPath}"> <arg line='"${SolutionFile}"' /> <arg line="/property:Configuration=${SolutionConfiguration}" /> <arg value="/target:Rebuild" /> <arg value="/verbosity:normal" /> <arg value="/nologo" /> <arg line='/logger:"C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll"'/> </exec> </target> 

我用上面的所有答案,仍然遇到一些奇怪的生成错误:“错误MSB6006:”AL.exe“退出代码128”。 错误没有任何帮助。 我做了一些谷歌search,并提出了几个答案。 这里是链接: msdn帮助和asp.net论坛

我把这个错误与整整一天搏斗,研究“详细的”和“诊断”的日志,但它只是把我指向那个失败的大会。 没有具体的错误。 我甚至不能在我的本地盒子上复制它。 最后,我决定尝试关于第二个链接( asp.net论坛 )中的资源文件命名约定的build议,以及… …哈莉! 我的构build开始工作。 由于资源名称,我不知道构build失败是怎么回事,仍然在努力,但我的直接目标是让构build工作。

希望这可以帮助别人。

NAnt 0.86和更高版本的盒子。 至于写这个,我使用0.91。

从网上下载时,请记得在解包之前“ 解锁 ”zip文件(重置安全区域)。

只要把信息放在那里,我可以再次find它,build立C ++项目,而无需修改PATH环境variables,并创buildLIB / LIBPATH / INCLUDEvariables或从vsvars32运行nant,在Nantconfiguration文件中需要类似的东西:

 <project> <readregistry property="WindowsSdkDir" key="SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\InstallationFolder" hive="LocalMachine" failonerror="true" /> <readregistry property="installRoot" key="SOFTWARE\Microsoft\.NETFramework\InstallRoot" hive="LocalMachine" /> <readregistry property="sdkInstallRoot" key="SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDK-NetFx40Tools\InstallationFolder" hive="LocalMachine" failonerror="false" /> <readregistry property="vs10Win32Tools" key="SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDK-Win32Tools\InstallationFolder" hive="LocalMachine" failonerror="false" /> <readregistry property="vcInstallDir" key="SOFTWARE\Microsoft\VisualStudio\10.0\Setup\VC\ProductDir" hive="LocalMachine" failonerror="true" /> <readregistry property="vs10dbghelp" key="SOFTWARE\Microsoft\VisualStudio\10.0\Setup\Dbghelp_path" hive="LocalMachine" failonerror="true" /> <setenv name="PATH" value="${path::combine(vcInstallDir, 'bin')};${vs10dbghelp};${sdkInstallRoot};${vs10Win32Tools};${environment::get-variable('PATH')};" /> <setenv name="INCLUDE" value="${path::combine(WindowsSdkDir, 'include')};${path::combine(vcInstallDir, 'atlmfc/include')};${path::combine(vcInstallDir, 'include')};${environment::get-variable('INCLUDE')}" /> <setenv name="LIB" value="${path::combine(WindowsSdkDir, 'lib')};${path::combine(vcInstallDir, 'atlmfc/lib')};${path::combine(vcInstallDir, 'lib')};${environment::get-variable('LIB')}" /> <setenv name="LIBPATH" value="${path::combine(installRoot, 'v4.0.30319')};${path::combine(installRoot, 'v3.5')};${path::combine(WindowsSdkDir, 'lib')};${path::combine(vcInstallDir, 'atlmfc/lib')};${path::combine(vcInstallDir, 'lib')};${environment::get-variable('LIBPATH')}" /> </project> 

registrypath是VS2010中的一个,因为相应的SDK需要时间…

我有类似的问题4.5,这解决了我的问题:

http://www.donnfelker.com/nant-sdkinstallroot-has-not-been-set/

我有一个64位的机器,但.NET安装为32位。 sdkInstallRoot无法find正确的path。 我检查了我的registry编辑器以find正确的path,并replace了nant.exe.config中的条目。

我replace了:

 <locatesdk property="sdkInstallRoot" minwinsdkver="v7.0A" minnetfxver="4.0" maxnetfxver="4.0.99999" failonerror="false" /> 

有了这个:

 <readregistry property="sdkInstallRoot" key="SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools\InstallationFolder" hive="LocalMachine" failonerror="false" />