2010-12-09 9 views
6

Estoy intentando construir varios proyectos de C# utilizando rastrillo y albacora. Se siente como si pudiera hacer esto sin un bucle, pero no puedo hacer que funcione. Lo que tengo que hacer es lo siguiente:¿Cómo construyo múltiples proyectos a la vez usando 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 

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 

Respuesta

16

En este momento, no hay apoyo directo en la tarea de MSBuild para la construcción de múltiples soluciones. Sin embargo, hay algunas opciones disponibles. Principalmente se trata de la sintaxis que más te guste para hacer esto, pero todas involucran un bucle de algún tipo.

Por cierto: albacore v0.2.2 acaba de lanzarse hace unos días. Su valor predeterminado es .net 4, y acorta el .path_to_command a .command. Sin embargo, como está predeterminado, no necesita especificar el comando .command para usar. Usaré esta sintaxis para los ejemplos, aquí. Usted puede leer notas de la versión adicionales en http://albacorebuild.net

Opción # 1

carga la lista de soluciones en una matriz y msbuild llamada para cada solución. esto agregará: la tarea de compilación con varias instancias de msbuild y cuando llame a la tarea: compilación, todas serán compiladas.

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

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

de crear este let una tarea de la manera que desee, y luego puede realizar su ciclo 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: solo algunas formas diferentes de encontrar todas las soluciones o recorrerlas.

Cuestiones relacionadas