在这一点上,MSBuild 任务中没有直接支持构建多个解决方案。不过,有几个选项可用。它主要归结为您最喜欢执行此操作的语法,但它们都涉及某种循环。
顺便说一句:albacore v0.2.2 几天前刚刚发布。它默认为 .net 4,并将 .path_to_command 缩短为 .command。但是,由于它是默认设置,因此您无需指定要使用的 .command。我将在示例中使用此语法,here。您可以在http://albacorebuild.net阅读其他发行说明
选项1
将解决方案列表加载到数组中,并为每个解决方案调用 msbuild。这将在 :build 任务中附加多个 msbuild 实例,当您调用 :build 任务时,所有这些实例都将被构建。
solutions = ["something.sln", "another.sln", "etc"]
solutions.each do |solution|
#loops through each of your solutions and adds on to the :build task
msbuild :build do |msb, args|
msb.properties :configuration => :Release,
msb.targets [:Test]
msb.solution = solution
end
end
在任何其他任务中调用rake build
或指定:build
为依赖项将构建您的所有解决方案。
选项 #2
选项 2 与我刚刚展示的基本相同...除了您可以MSBuild
直接调用类而不是msbuild
任务
msb = MSBuild.new
msb.solution = ...
msb.properties ...
#other settings...
这让您可以随心所欲地创建任务,然后您可以在任何地方执行循环。例如:
task :build_all_solutions do
solutions = FileList["solutions/**/*.sln"]
solutions.each do |solution|
build_solution solution
end
end
def build_solution(solution)
msb = MSBuild.new
msb.properties :configuration => :Release,
msb.targets [:Test]
msb.solution = solution
msb.execute # note: ".execute" replaces ".build" in v0.2.x of albacore
end
现在,当您调用rake build_all_solutions
或添加:build_all_solutions
作为对另一个任务的依赖项时,您的所有解决方案都将被构建。
...
根据我在这里展示的内容,可能有十几种变体可以完成。然而,它们并没有显着的不同——只是找到所有解决方案的几种不同方法,或者循环它们。