使用Nant构建.NET 4项目

时间:2009-08-01 03:07:31

标签: .net build .net-4.0 nant

如何构建面向.NET 4.0 Framework的项目?

8 个答案:

答案 0 :(得分:23)

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

我下载了vs2010和.net 4运行时。 生产版本似乎是v4.30319即(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 an 向NAnt.exe.config添加了文本。

然后我将我的nant脚本更新为

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

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

这让我得到了.net 4二进制文件......

更新2010-06-14:以上用nant-0.85回答,我升级到nant-0.90并且必须将vendor="Microsoft"添加到添加到nants config的framework属性中。此外,看起来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" />

答案 1 :(得分:13)

如果您想使用nant构建面向.NET 4.0的项目,则必须修改NAnt.exe.config并添加net-4.0目标框架并向<supportedRuntime ... />添加<startup行}&GT;部分。

答案 2 :(得分:5)

答案 3 :(得分:2)

这与这些问题非常相似:

<msbuild> task or msbuild.exe with NAnt?

另一种选择是从一个块直接调用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>

答案 4 :(得分:1)

我使用了上面的所有答案,仍然遇到了一些奇怪的构建错误:“错误MSB6006:”AL.exe“退出代码128”。错误没有任何帮助。我做了一些谷歌搜索,并得出了一些答案。以下是链接:msdn helpasp.net forums

我花了一整天的时间来解决这个错误,研究“详细”和“诊断”日志,但它所做的只是指向构建失败的程序集。没有具体的错误。我甚至无法在我当地的盒子上复制它。最后,我决定在第二个链接(asp.net forums)和... alleluia中尝试关于资源文件命名约定的建议!我的构建开始工作了。由于资源名称,我不知道构建失败了什么,仍然在努力,但我的直接目标是让构建工作。

希望这有助于其他人。

答案 5 :(得分:1)

NAnt 0.86及更高版本开箱即用。在撰写本文时,我使用的是0.91。

从网上下载时,请在打开包装之前记住“unblock”zip文件(重置安全区域)。

答案 6 :(得分:0)

只是将信息放在那里,以便我可以再次找到它,构建C ++项目而不修改PATH环境变量并创建LIB / LIBPATH / INCLUDE变量或从vsvars32运行nant,在Nant配置文件中需要这样的东西:

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

注册表路径是VS2010的路径,因为相应的SDK正在花时间......

答案 7 :(得分:0)

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

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

我有64位机器,但.net安装为32位。 sdkInstallRoot无法找到正确的路径。我检查了我的注册表编辑器以找到正确的路径并替换了nant.exe.config中的条目。

我换了:

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