[英]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
>部分。
http://paigecsharp.blogspot.com/2009/08/nant-net-framework-40-configuration.html是NAnt的.config文件的完整代碼。
這非常類似於這些問題/問題:
另一種選擇是直接從塊中調用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 help和asp.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.