Comment puis-je construire plusieurs projets à la fois en utilisant Albacore?
Question
Je suis en train de construire plusieurs projets C # à l'aide de rake et le germon. Il se sent comme je devrais être capable de le faire sans une boucle, mais je ne peux pas faire tout ce travail. Ce que je dois faire est la suivante:
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
Je préfère faire quelque chose de plus propre, comme cela
msbuild :selected_test_projects do |msb, args|
msb.path_to_command = @net40Path
msb.properties :configuration => :Release,
msb.targets [ :Test]
msb.solution = @teststorun
end
La solution
À ce stade, il n'y a pas de soutien direct dans la tâche MSBuild pour construire plusieurs solutions.There sont quelques options disponibles, cependant. Il est la plupart du temps à ce que vous la syntaxe comme le meilleur pour le faire, mais ils impliquent tous une boucle de quelque sorte.
Par ailleurs: le germon v0.2.2 vient d'être sortie il y a quelques jours. Il par défaut .net 4 et raccourcit le .path_to_command jusqu'à .command. Depuis sa valeur par défaut, cependant, vous n'avez pas besoin de spécifier le .command à utiliser. Je vais utiliser cette syntaxe pour les exemples, ici. Vous pouvez lire les notes de version supplémentaires à http://albacorebuild.net
# 1
Charger la liste des solutions dans un msbuild de tableau et appel à chaque solution. ce ajoutera la: tâche de construction avec plusieurs instances de msbuild et quand vous appelez le:. tâche de construction, tous seront construits
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
appelant rake build
ou en spécifiant :build
comme une dépendance de toute autre tâche construira toutes vos solutions.
# 2
L'option 2 est fondamentalement la même ce que je viens ... sauf montrais vous pouvez appeler la classe MSBuild
directement au lieu de la tâche msbuild
msb = MSBuild.new
msb.solution = ...
msb.properties ...
#other settings...
Laissez vous est de créer une tâche comme vous le souhaitez, et vous pouvez effectuer votre boucle où vous voulez. Par exemple:
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
Maintenant, lorsque vous appelez rake build_all_solutions
ou que vous ajoutez :build_all_solutions
comme une dépendance à une autre tâche, toutes vos solutions seront construites.
...
il y a probablement une douzaine de variations qui peuvent être faites, en fonction de ce que je l'ai montré ici. Cependant, ils ne diffèrent pas de manière significative - que quelques façons différentes de trouver toutes les solutions, ou boucle à travers les
.