2012-09-04 40 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

相关问题