¿Cómo construir varios proyectos a la vez utilizando el atún blanco?
Pregunta
Estoy tratando de construir varios proyectos de C # con el rastrillo y el atún blanco. Se siente como que debería ser capaz de hacer esto sin un bucle, pero no puedo hacerlo bastante trabajo. Lo que tengo que hacer es lo siguiente:
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
Prefiero hacer algo más limpio, como este
msbuild :selected_test_projects do |msb, args|
msb.path_to_command = @net40Path
msb.properties :configuration => :Release,
msb.targets [ :Test]
msb.solution = @teststorun
end
Solución
En este momento, no hay apoyo directo en la tarea de MSBuild para la construcción de múltiples solutions.There son algunas opciones disponibles, sin embargo. En su mayoría se trata de lo que sintaxis como la mejor para hacer esto, pero todos ellos implican un bucle de algún tipo.
Por cierto: el atún blanco v0.2.2 estaba lanzamiento hace unos pocos días. Por defecto es .NET 4, y acorta el .path_to_command a .command. Desde su valor por defecto, sin embargo, no es necesario especificar el .command a su uso. Voy a utilizar esta sintaxis para los ejemplos, aquí. Usted puede leer notas de la versión adicionales en http://albacorebuild.net
Opción # 1
cargar la lista de soluciones en una matriz y llamada msbuild para cada solución. Esto añadirá el: acumulación de tareas con múltiples instancias de msbuild y cuando se llama al:. tarea de construcción, todos ellos se construirá
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
llamando rake build
o especificar :build
como una dependencia en cualquier otra tarea va a construir todas sus soluciones.
Opción # 2
La opción 2 es básicamente lo mismo lo que acaba de aparecer ... excepto que usted puede llamar a la clase MSBuild
directamente en lugar de la tarea msbuild
msb = MSBuild.new
msb.solution = ...
msb.properties ...
#other settings...
Vamos a crear una tarea de la forma que desee, y luego se puede llevar a cabo su bucle donde desee. Por ejemplo:
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
Ahora, cuando se llama rake build_all_solutions
o agregar :build_all_solutions
como una dependencia en otra tarea, todas sus soluciones se construirá.
...
hay probablemente tienen una docena de variaciones que se pueden hacer, en base a lo que he mostrado aquí. Sin embargo, no difieren significativamente - sólo algunas maneras diferentes para encontrar todas las soluciones, o de bucle a través de ellos
.