Domanda

ho messo questa classe insieme, ma non è al lavoro per l'esecuzione in realtà una generazione. Ho inserito qualche altro registrazione e nessun errore vengono sollevate. mi dichiaro come un noob su Ruby così sperando qualche bel rubino esperto può individuare qualsiasi errore stupido che ho!

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

Inoltre ho provato con: costruire, piuttosto che: compilazione.

ho visto tonno bianco a lavorare e realizzare il potere di esso, solo bisogno di ottenere le mie capacità un po 'affinato spera

È stato utile?

Soluzione

il metodo msbuild che si sta chiamando non è mai di esecuzione perché Albacore è una suite di compiti rastrello, e msbuild è uno di quei compiti che vuole essere eseguito da rastrello, non direttamente a un altro metodo, anche se può essere fatto.

Parlando msb.execute all'interno del blocco do |msb| ... end non eseguirà l'operazione, in quanto questo blocco non viene valutato finché il task rake stesso viene eseguito.

avete un paio di opzioni per ottenere questo al lavoro. opzione # 1 è l'uso consigliato e previsto dei Albacore. Vi consiglio vivamente di utilizzare rastrello e alalunga come sono stati concepiti per essere utilizzati, in modo da non incorrere in problemi in futuro. opzione # 2 e # 3 lavoreranno in questo momento, ma le modifiche alle API di rastrello o tonno bianco può rompere questi senza preavviso. Naturalmente, è possibile utilizzare loro tuttavia si desidera o necessità.

1. trasformare questo in uno script di rake al posto di una classe e il metodo

# 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

e quindi eseguire questo tramite un rastrello, chiamando rake dalla riga di comando, nella stessa cartella del rakefile.rb

2. utilizzare Task[:compile].execute per eseguire l'operazione entro il metodo.

dal momento che la chiamata msbuild è un compito rastrello e non un metodo standard che l'esegue di codice immediatamente, è necessario eseguire manualmente l'operazione che si crea dietro le quinte. questo renderà il vostro lavoro codice esistente, ma non è davvero il modo consigliato di lavorare con compiti rake.

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. utilizzare la classe MSBuild direttamente, al posto del compito msbuild rake

se davvero bisogno di chiamare msbuild dall'interno di un metodo, allora si dovrebbe evitare di usare il compito msbuild e chiamare direttamente la classe MSBuild. questo ti permette di lavorare direttamente con il codice che si desidera ... non più passare attraverso rastrello per chiamata qualcosa che si può chiamare direttamente

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

questo è l'unico scenario in cui è necessario chiamare .Execute, manualmente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top