我正在使用rake和albacore来自动构建我创建的库。我想为那些使用.NET 2.0,.NET 3.5,.NET 4.0和.NET 4.5的人提供库。代码并没有什么特别的,它应该移植得很好。
我真正想要的是一个rake构建脚本,它将为每个平台构建程序集。研究似乎是设置ToolsVersion的问题,但我无法让它工作。
有没有最佳做法,如何做到这一点的例子?或者我需要一个不同的构建工具吗?
更新 我能够在shell中提供命令行参数,但仍然没有使用Albacore。
答案 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。