Почему эта задача альбакора, определенная в классе, не работает?

StackOverflow https://stackoverflow.com/questions/4272981

  •  28-09-2019
  •  | 
  •  

Вопрос

Я положил этот класс вместе, но не работает, чтобы на самом деле запустить сборку. Я вставил какое-то другое ведение журнала, и никаких ошибок не поднимается. Я заявляю о себе как нуб на Руби, поэтому надеясь, что какой-то прекрасный эксперт 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, вручную.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top