Por que essa tarefa do Albacore está definida em uma classe, não está funcionando?

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

  •  28-09-2019
  •  | 
  •  

Pergunta

Eu juntei essa aula, mas não está funcionando para realmente executar uma construção. Inseri algumas outras explorações e nenhum erro está sendo levantado. Eu me declaro um noob em Ruby, então espero que algum especialista em rubi adorável possa identificar qualquer erro idiota que eu tenha!

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

Eu também tentei usar: construir em vez de: compilar.

Eu vi Albacore trabalhando e percebo o poder disso, só preciso obter minhas habilidades um pouco aprimoradas, esperançosamente

Foi útil?

Solução

a msbuild O método que você está ligando nunca está executando porque Albacore é um conjunto de tarefas de rake e msbuild é uma daquelas tarefas que deseja ser executado pelo RAKE, não diretamente em outro método, embora possa ser feito.

Chamando msb.execute dentro do do |msb| ... end O bloco não executa a tarefa, porque esse bloco não é avaliado até que a própria tarefa de rake seja executada.

Você tem algumas opções para fazer isso funcionar. A opção 1 é o uso recomendado e pretendido de Albacore. Eu recomendo fortemente o uso de Rake e Albacore, pois eles deveriam ser usados, para que você não tenha problemas no futuro. A opção 2 e 3 funcionarão agora, mas as alterações na API de Rake ou Albacore podem quebrá -las sem aviso prévio. Obviamente, você pode usá -los como quiser ou precisar.

1. Transforme isso em um script de rake em vez de uma classe e método

# 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

e depois execute isso através de um ancinho, ligando rake Da linha de comando, na mesma pasta que o RakeFile.rb

2. Use Task[:compile].execute Para executar a tarefa em seu método.

desde o msbuild A chamada é uma tarefa de rake e não um método padrão que executa seu código imediatamente, você deve executar manualmente a tarefa criada nos bastidores. Isso fará com que seu código existente funcione, mas não é realmente a maneira recomendada de trabalhar com tarefas de 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. Use o MSBuild classe diretamente, em vez do msbuild tarefa de rake

Se você realmente precisa ligar para o MSBuild de dentro de um método, evite usar a tarefa MSBUILD e ligar diretamente para a classe MSBUILD. Isso permite que você trabalhe diretamente com o código que você deseja ... não passa mais pela rake para chamar algo que você pode ligar diretamente

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

Este é o único cenário em que você precisa chamar .Execute, manualmente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top