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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top