Почему эта задача альбакора, определенная в классе, не работает?
Вопрос
Я положил этот класс вместе, но не работает, чтобы на самом деле запустить сборку. Я вставил какое-то другое ведение журнала, и никаких ошибок не поднимается. Я заявляю о себе как нуб на Руби, поэтому надеясь, что какой-то прекрасный эксперт Ruby может заметить любую идиотскую ошибку, у меня есть!
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
Я также попробовал использовать: построить, а не: компилировать.
Я видел Альбакор, работающую и осознающую силу, просто нужно, чтобы мои навыки немного догнали, надеюсь,
Решение
то msbuild
Метод, который вы звоните, никогда не выполняют, потому что Albacore - это набор задач граблей, а также msbuild
Это одна из этих задач, которые хотят выполнять грабли, а не непосредственно в другом методе, хотя это можно сделать.
Призыв msb.execute
внутри do |msb| ... end
Блок не будет выполнять задачу, потому что этот блок не оценивается до тех пор, пока сама за задание грабли не будет выполнена.
У вас есть несколько вариантов для того, чтобы получить это на работу. Вариант № 1 - рекомендуемое и предполагаемое использование Albacore. Я настоятельно рекомендую использовать грабли и альбакор, поскольку они должны были быть использованы, чтобы вы не столкнулись с проблемами в будущем. Вариант № 2 и # 3 будет работать прямо сейчас, но изменения в API граблей или альбакора могут нарушить их без предварительного уведомления. Конечно, вы можете использовать их, однако, как вы хотите или нужно.
1. Включите это в скрипт граблей вместо класса и метода
# 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
а затем запустить это через грабли, позвонив rake
из командной строки, в той же папке, что и Rakefile.rb
2. Используйте Task[:compile].execute
Для выполнения задачи в вашем методе.
поскольку msbuild
Вызов - это задача 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. Используйте MSBuild
класс напрямую, а не msbuild
Райк Задача
Если вам действительно нужно позвонить MSBuild из способа, то вам следует избегать использования задачи MSBuild и вызовете класс MSBuild напрямую. Это давайте вы будете работать непосредственно с кодом, который вы хотите ... больше не проходите грабли, чтобы позвонить тому, что вы можете позвонить напрямую
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
Это единственный сценарий, в котором вам нужно позвонить .Execute, вручную.