метод msbuild
, который вы вызываете, никогда не выполняется, потому что Albacore - это набор задач rake, а msbuild
- это одна из тех задач, которые хотят быть выполнены rake, а не напрямую в другом методе, хотя он можетбыть сделано
Вызов msb.execute
внутри блока do |msb| ... end
не выполнит задачу, потому что этот блок не оценивается, пока не будет выполнена сама задача rake.
у вас есть несколько вариантовчтобы заставить это работать.Вариант № 1 - рекомендуемое и предполагаемое использование Albacore.Я настоятельно рекомендую использовать грабли и Albacore, так как они предназначены для использования, чтобы в будущем не возникало проблем.Варианты № 2 и № 3 будут работать прямо сейчас, но изменения в API граблей или Albacore могут нарушить их без предварительного уведомления.конечно, вы можете использовать их по своему усмотрению или необходимости.
1.превратите это в скрипт rake вместо класса и метода
# 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
является задачей с граблями, а не стандартным методом, который выполняет его код немедленно, вы должны вручную выполнить задачу, созданную позадисцены.это заставит ваш существующий код работать, но на самом деле это не рекомендуемый способ работы с граблями.
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
rake
, если вам действительно нужно вызвать msbuild из метода, тогда вам следует избегать использования задачи msbuild и напрямую вызывать класс 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'
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,вручную.