Perché questo compito Albacore, definito in una classe, non funziona?
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
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.