簡體   English   中英

使用Nant構建.NET 4項目

[英]Building .NET 4 projects with Nant

我如何才能構建面向.NET 4.0 Framework的項目?

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二進制文件......

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

如果要使用nant構建面向.NET 4.0的項目,則必須修改NAnt.exe.config並添加net-4.0目標框架並將<supportedRuntime ... />行添加到<startup >部分。

這非常類似於這些問題/問題:

<msbuild>任務或msntild.exe與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>

NAnt 0.86及更高版本開箱即用。 寫這篇文章時,我使用的是0.91。

從網上下載時,請記得在解壓縮之前“ 解鎖 ”zip文件(重置安全區域)。

我使用了上面的所有答案,仍然遇到了一些奇怪的構建錯誤:“錯誤MSB6006:”AL.exe“退出代碼128”。 錯誤沒有任何幫助。 我做了一些谷歌搜索,並得出了一些答案。 以下是鏈接: msdn helpasp.net論壇

我花了一整天的時間來解決這個錯誤,研究了“詳細”和“診斷”日志,但它所做的就是指向構建失敗的程序集。 沒有具體的錯誤。 我甚至無法在我當地的盒子上復制它。 最后,我決定在第二個鏈接( asp.net論壇 )和... alleluia中嘗試關於資源文件命名約定的建議! 我的構建開始工作了。 由於資源名稱,我不知道構建失敗了什么,仍然在努力,但我的直接目標是讓構建工作。

希望這有助於其他人。

只是把信息放在那里,以便我可以再次找到它,構建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正在花時間......

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM