【问题标题】:Building .NET 4 projects with Nant使用 Nant 构建 .NET 4 项目
【发布时间】:2010-11-15 23:43:56
【问题描述】:

如何让 nant 构建以 .NET 4.0 框架为目标的项目?

【问题讨论】:

    标签: .net build .net-4.0 nant


    【解决方案1】:

    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 将文本添加到 NAnt.exe.config。

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

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

    所以我的项目 nant 脚本使用 .net 4 编译器

    这让我有了一个 .net 4 二进制文件的 nant 构建 ....

    2010 年 6 月 14 日更新:上面的答案是 nant-0.85,我升级到 nant-0.90 并且必须将 vendor="Microsoft" 添加到添加到 nants 配置的框架属性中。此外,看起来 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 的版本更新到最新的可用版本(当前为 0.91 Alpha 2)对我来说是必要的(除了构建和配置更改之外)。顺便说一句,不需要最后一个 .
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 这是我收到消息后需要的请在'win32'平台节点下添加一个家庭'net'和clrversion'4.0.30319'的\\节点。
      【解决方案4】:

      这与这些问题/问题非常相似:

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

      【讨论】:

        【解决方案5】:

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

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

        希望这对其他人有帮助。

        【讨论】:

          【解决方案6】:

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

          从网上下载时,解压前记得“unblock”压缩文件(重置安全区)。

          【讨论】:

            【解决方案7】:

            只是将信息放在那里以便我可以再次找到它,构建 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正在花费时间......

            【讨论】:

              【解决方案8】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2010-10-15
                • 2012-08-07
                • 2010-10-06
                • 1970-01-01
                • 2010-09-10
                • 1970-01-01
                • 2010-11-16
                相关资源
                最近更新 更多