Как создать несколько проектов одновременно, используя Albacore? - PullRequest
6 голосов
/ 09 декабря 2010

Я пытаюсь создать несколько проектов на C #, используя rake и 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

1 Ответ

16 голосов
/ 09 декабря 2010

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

Кстати: albacore v0.2.2 был выпущен несколько дней назад.По умолчанию это .net 4 и сокращает .path_to_command до .command.Так как он по умолчанию, вам не нужно указывать .command для использования.Я буду использовать этот синтаксис для примеров, здесь.Вы можете прочитать дополнительные примечания к выпуску в 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 в качестве зависимости от другой задачи, будут построены все ваши решения.

...

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

...