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

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

person Precipitous    schedule 09.12.2010    source источник


Ответы (1)


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

...

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

person Derick Bailey    schedule 09.12.2010