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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top