¿Por qué es esta tarea albacora, definida en una clase, que no trabaja?
Pregunta
Me puso esta clase juntos, pero no está funcionando realmente ejecutar una generación. He insertado algún otro registro y se están planteando ningún error. Me declaro como un novato en Rubí por lo que la esperanza de algún precioso rubí experto puede detectar cualquier error idiota que tengo!
require 'rubygems'
require 'albacore'
require 'albacore/support/albacore_helper'
require 'rake'
require 'rake/tasklib'
class Build_Assembly
def build(build_properties)
puts 'doing an assembly build'
msbuild :compile do |msb|
puts 'running build'
msb.properties :configuration => :Debug
msb.targets :Clean, :Build
msb.solution = build_properties.solution_file_location
msb.execute
end
end
end
También he intentado usar: en lugar de acumulación: compilación.
he visto albacora de trabajo y darse cuenta de la eficacia de ella, sólo hay que tener en mis habilidades de esperar un poco más afilado
Solución
msbuild
el método que está llamando no está ejecutando porque albacora es un conjunto de tareas de desprendimiento, y msbuild
es una de las tareas que quiere ser ejecutado por el rastrillo, no directamente en otro método, a pesar de que se puede hacer.
Llamada en el interior del bloque msb.execute
do |msb| ... end
no ejecutará la tarea, ya que este bloque no se evalúa hasta que la tarea se ejecuta en sí rastrillo.
usted tiene un par de opciones para conseguir que esto funcione. la opción # 1 es el uso recomendado y la intención de albacora. Recomiendo encarecidamente el uso de rastrillo y albacora ya que estaban destinados a ser utilizados, por lo que no se enfrenten a problemas en el futuro. Opción # 2 y # 3 funcionarán en este momento, pero los cambios en la API de rastrillo o albacora puede romper este sin previo aviso. por supuesto, puede usarlos sin embargo que desea o necesita.
1. convertir esto en un script rastrillo en lugar de una clase y método
# rakefile.rb
require 'albacore'
task :default => [:compile]
msbuild :compile do |msb|
puts 'running build'
msb.properties :configuration => :Debug
msb.targets :Clean, :Build
msb.solution = build_properties.solution_file_location
end
y ejecute esto a través de un rastrillo, llamando rake
desde la línea de comandos, en la misma carpeta que el rakefile.rb
2. Task[:compile].execute
utilizar para ejecutar la tarea de un método.
desde la llamada msbuild
es una tarea rastrillo y no un método estándar que ejecuta su código de inmediato, se tienen que ejecutar manualmente la tarea que se crea entre bastidores. esto hará que su trabajo código existente, pero en realidad no es la forma recomendada de trabajar con tareas rastrillo.
require 'rubygems'
require 'albacore'
require 'albacore/support/albacore_helper'
require 'rake'
require 'rake/tasklib'
class Build_Assembly
def build(build_properties)
puts 'doing an assembly build'
msbuild :compile do |msb|
puts 'running build'
msb.properties :configuration => :Debug
msb.targets :Clean, :Build
msb.solution = build_properties.solution_file_location
end
Task[:compile].execute
end
end
3. utilizar la clase MSBuild
directamente, en lugar de la tarea msbuild
rastrillo
si realmente necesidad de msbuild llamada desde dentro de un método, entonces usted debe evitar el uso de la tarea msbuild y llamar a la clase de MSBuild directamente. esto te permite trabajar directamente con el código que desea ... no más de pasar por el rastrillo a la llamada de algo que se puede llamar directamente
require 'rubygems'
require 'albacore'
require 'albacore/support/albacore_helper'
require 'rake'
require 'rake/tasklib'
class Build_Assembly
def build(build_properties)
puts 'doing an assembly build'
msb = MSBuild.new
puts 'running build'
msb.properties :configuration => :Debug
msb.targets :Clean, :Build
msb.solution = build_properties.solution_file_location
msb.execute
end
end
Este es el único escenario en el que es necesario llamar a .execute, de forma manual.