Por que essa tarefa do Albacore está definida em uma classe, não está funcionando?
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
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.