Warum wird diese Aufgabe Weißen Thun, in einer Klasse definiert ist, nicht?
Frage
Ich habe diese Klasse zusammen, aber es funktioniert nicht wirklich auf einen Build ausführen. Ich habe in eine andere Protokollierung und keine Fehler erhoben werden. Ich erkläre mich als Noob Ruby so einig schöner Ruby-Experte der Hoffnung, jeden idiotischen Fehler erkennen kann ich!
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
Ich habe auch versucht, mit: Build statt: Kompilierung.
Ich habe Weißen Thun arbeiten und erkennen die Macht der es gesehen, muss nur meine Fähigkeiten ein wenig hoffnungsvoll geschliffen bekommen
Lösung
die msbuild
Methode, dass Sie anrufen, nie ausgeführt wird, weil Weißer Thun eine Suite von Rake Aufgaben ist, und msbuild
ist eine jener Aufgaben, die von Rake ausgeführt werden möchte, nicht direkt in einem anderen Verfahren, obwohl es getan werden kann.
Beim msb.execute
innerhalb des do |msb| ... end
Blockes wird die Aufgabe nicht ausführen, weil dieser Block nicht bis zur Rake Aufgabe ausgewertet wird selbst ausgeführt wird.
Sie haben ein paar Möglichkeiten, um diese an die Arbeit. Option 1 ist die empfohlene und bestimmungsgemäßer Verwendung Weißen Thun. Ich empfehle mit Rechen und Weißen Thun, wie sie gedacht waren, verwendet werden, so dass Sie in der Zukunft Probleme nicht laufen. Option # 2 und # 3 wird jetzt arbeiten, aber Änderungen an der API von Rechen oder Weißer Thun können diese ohne vorherige Ankündigung brechen. Natürlich können Sie sie jedoch verwenden Sie wollen oder müssen.
1. machen dieses zu einem Rake-Skript anstelle einer Klasse und Methode
# 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
und dann über einen Rechen lief diese durch rake
von der Kommandozeile, im selben Ordner wie die rakefile.rb Aufruf
2. verwenden Task[:compile].execute
die Aufgabe, innerhalb Ihrer Methode auszuführen.
, da der msbuild
Aufruf ist eine Harke Aufgabe und kein Standardverfahren, dass es den Code ausführt sofort, müssen Sie manuell die Aufgabe ausführen, die hinter den Kulissen erstellt wird. dies wird Ihre vorhandenen Code funktioniert, aber es ist nicht wirklich der empfohlene Weg, mit Rechen Aufgaben zu arbeiten.
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. Verwenden Sie die MSBuild
Klasse direkt anstelle der msbuild
Rake Aufgabe
, wenn Sie wirklich brauchen, um den Anruf msbuild innerhalb einer Methode, dann sollten Sie vermeiden, dass die msbuild Aufgabe und rufen direkt die MSBuild-Klasse. Dies lässt Sie direkt mit dem Code arbeiten, dass Sie ... nicht mehr gehen durch Rake Anruf etwas wollen, dass Sie direkt anrufen
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
Dies ist das einzige Szenario, in dem Sie benötigen .execute anrufen, manuell.