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
Était-ce utile?

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

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top