2010-12-09 62 views
6

J'essaye de construire plusieurs projets C# en utilisant le râteau et le germon. Il me semble que je devrais être capable de le faire sans boucle, mais je ne peux pas vraiment le faire fonctionner. Ce que je dois faire est la suivante:Comment créer plusieurs projets à la fois avec 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 

je préfère faire quelque chose plus propre, comme ce

msbuild :selected_test_projects do |msb, args| 
    msb.path_to_command = @net40Path 
    msb.properties :configuration => :Release, 
    msb.targets [ :Test] 
    msb.solution = @teststorun 
end 

Répondre

16

À ce stade, il n'y a pas de soutien direct dans la tâche MSBuild pour la construction de multiples solutions. Il y a quelques options disponibles, cependant. Cela dépend surtout de la syntaxe que vous préférez pour ce faire, mais elles impliquent toutes une sorte de boucle. Au fait: albacore v0.2.2 était juste sorti il ​​y a quelques jours. Par défaut, .net 4, et raccourcit la .path_to_command en .command. Comme il est par défaut, vous n'avez pas besoin de spécifier la commande .command à utiliser. Je vais utiliser cette syntaxe pour les exemples, ici. Vous pouvez lire les notes de version supplémentaires à http://albacorebuild.net

Option 1

charge la liste des solutions dans un msbuild de tableau et appel à chaque solution. ceci ajoutera la tâche: build avec plusieurs instances de msbuild et quand vous appelez la tâche: build, elles seront toutes construites.

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.

Option # 2

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... 

cette let vous créez de une tâche comme vous le souhaitez, puis 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 une douzaine ont probablement des 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 - juste quelques façons différentes de trouver toutes les solutions, ou de les parcourir.