2012-09-04 70 views
1

我正在使用rake和albacore來自動創建我創建的庫。我想爲使用.NET 2.0,.NET 3.5,.NET 4.0和.NET 4.5的用戶提供庫。代碼沒有什麼特別之處,它應該移植得很好。如何在多個.NET版本中運行Albacore中的msbuild任務?

我真正想要的是一個耙構建腳本,將構建每個平臺的程序集。研究看起來像是設置ToolsVersion的問題,但我一直沒有能夠得到這個工作。

是否有任何最佳實踐,如何做到這一點的例子?或者我需要一個不同的構建工具?

更新: 我能得到這個工作只是提供在shell命令行參數,但還沒有得到它與長鰭金槍魚的工作。

+0

你好?這個答案有幫助嗎?或者您是否已經解決了您的問題? –

回答

4

Albacore msbuild任務和相關配置對象使用一些voodoo來自動查找和設置默認的MSBuild exe版本。它基於通用命令行任務,因此它有一個command參數。

self.command = File.join(get_net_version(netversion), "MSBuild.exe") 

您可以手動設置的命令選項和定義許多任務

task :build_all_versions => [ :build_net20, :build_net35, :build_net40 ] 

msbuild :build_net20 do |msb| 
    msb.command = 'C:/Windows/Microsoft.NET/Framework/v2.0.50727/msbuild.exe' 
end 

msbuild :build_net35 do |msb| 
    msb.command = 'C:/Windows/Microsoft.NET/Framework/v3.5/msbuild.exe' 
end 

msbuild :build_net40 do |msb| 
    msb.command = 'C:/Windows/Microsoft.NET/Framework/v4.0.30319/msbuild.exe' 
end 

或者,你可以使用internal Albacore module/method得到msbuild.exe路徑。它定義了一個私有模塊方法,所以你必須去include它。

include Configuration::NetVersion 

msbuild :build_net20 do |msb| 
    msb.command = File.join(get_net_version :net20, 'msbuild.exe') 
    ... 
end 

而且,在這一點上,我將基於.NET版本符號數組動態地定義任務。

net_versions = [ :net20, :net35, :net40 ] 
build_tasks = net_versions.map { |ver| "build_#{ver}" } 

task :build_all => build_tasks 

net_versions.zip(build_tasks) do |ver, task| 
    msbuild task do |msb| 
     msb.command = File.join(get_net_version ver, 'msbuild.exe') 
     # all the other stuff 
    end 
end 

有沒有.NET 3.0工具,他們所使用的.NET 2.0工具,apparently

+0

謝謝你對我的回答完全一樣的問題。 – twreid

相關問題