Как создать несколько проектов одновременно с помощью Albacore?
Вопрос
Я пытаюсь построить несколько проектов C# с использованием Grable и Albacore. Такое ощущение, что я должен быть в состоянии сделать это без цикла, но я не могу заставить его работать. Я должен сделать это:
msbuild :selected_test_projects do |msb, args|
@teststorun.each do |project|
msb.path_to_command = @net40Path
msb.properties :configuration => :Release,
msb.targets [ :Test]
msb.solution = project
msb.build
end
end
Я бы предпочел сделать что -то чище, такое как это
msbuild :selected_test_projects do |msb, args|
msb.path_to_command = @net40Path
msb.properties :configuration => :Release,
msb.targets [ :Test]
msb.solution = @teststorun
end
Решение
На этом этапе нет прямой поддержки в задаче MSBuild для создания нескольких решений. Однако есть несколько вариантов. В основном это сводится к тому, какой синтаксис вам больше всего нравится для этого, но все они включают в себя какую -то петлю.
Кстати: Albacore v0.2.2 был выпущен несколько дней назад. По умолчанию по умолчанию .NET 4 и сокращает .path_to_command до .command. Поскольку это по умолчанию, вам не нужно указывать. Command для использования. Я использую этот синтаксис для примеров, здесь. Вы можете прочитать дополнительные заметки о выпуске на http://albacorebuild.net
Опция 1
Загрузите список решений в массив и вызовите MSBuild для каждого решения. Это добавит: задачу сборки с несколькими экземплярами MSBuild, и когда вы позвоните: задача сборки, все они будут построены.
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
Как зависимость от другой задачи, все ваши решения будут построены.
...
Вероятно, есть дюжина вариаций, которые можно сделать, основываясь на том, что я показал здесь. Тем не менее, они не различаются значительно - лишь несколько разных способов найти все решения или пройти через них.