Pourquoi cette tâche Albacore, définie dans une classe, ne fonctionne pas?
Question
Je mets cette classe ensemble, mais il ne fonctionne pas à courir en fait une construction. J'inséré une autre exploitation forestière et aucune erreur sont élevés. Je me déclare comme un noob sur Ruby espérant ainsi une belle Ruby Expert peut repérer toute erreur stupide que j'ai!
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
J'ai aussi essayé d'utiliser: construire plutôt que: la compilation.
J'ai vu germon travailler et de réaliser la puissance de celui-ci, juste besoin d'obtenir mes compétences un peu adouci, espérons
La solution
la méthode msbuild
que vous appelez exécute jamais parce germon est une suite de tâches de râteau et msbuild
est l'une de ces tâches qui veut être exécuté par râteau, pas directement dans une autre méthode, mais il peut être fait.
Appel msb.execute
à l'intérieur du bloc do |msb| ... end
ne sera pas exécuter la tâche, parce que ce bloc ne sera évalué que la tâche de coupe lui-même est exécutée.
vous avez quelques-unes des options pour obtenir ce travail. option 1 est l'utilisation recommandée et prévue de germon. Je recommande fortement d'utiliser râteau et Albacore comme ils étaient destinés à être utilisés, de sorte que vous ne rencontrez des problèmes à l'avenir. option # 2 et # 3 travailleront en ce moment, mais les changements à l'API de râteau ou germon peuvent briser ces sans préavis. Bien sûr, vous pouvez les utiliser comme vous le voulez ou besoin.
1. transformer cela en un script de coupe au lieu d'une classe et de méthode
# 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
et ensuite exécuter ce par l'intermédiaire d'un râteau, en appelant rake
à partir de la ligne de commande, dans le même répertoire que le rakefile.rb
2. utiliser Task[:compile].execute
pour exécuter la tâche dans votre méthode.
depuis l'appel msbuild
est une tâche de râteau et non une méthode standard qui exécute le code de suite, vous devez exécuter manuellement la tâche qui est créé dans les coulisses. cela rendra votre travail de code existant, mais ce n'est pas vraiment la façon recommandée de travailler avec des tâches de râteau.
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. utiliser la classe MSBuild
directement, au lieu de la tâche de râteau msbuild
si vous avez vraiment besoin de faire appel msbuild à partir d'une méthode, alors vous devriez éviter d'utiliser la tâche msbuild et appeler la classe MSBuild directement. Laissez vous ce Travaillons directement avec le code que vous voulez ... plus passer par râteau pour appeler quelque chose que vous pouvez appeler directement
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
est le seul scénario dans lequel vous devez appeler .Execute, manuellement.