Как создать несколько проектов одновременно с помощью Albacore?

StackOverflow https://stackoverflow.com/questions/4393848

  •  10-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь построить несколько проектов 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 Как зависимость от другой задачи, все ваши решения будут построены.

...

Вероятно, есть дюжина вариаций, которые можно сделать, основываясь на том, что я показал здесь. Тем не менее, они не различаются значительно - лишь несколько разных способов найти все решения или пройти через них.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top