为什么这项Albacore任务在班级中定义而无法工作?
题
我将这堂课放在一起,但实际上并没有真正运行构建。我插入了其他记录,没有提出错误。我宣布自己是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
我还尝试使用:构建而不是:编译。
我已经看到Albacore在工作并意识到它的力量,只需要磨练我的技能一点
解决方案
这 msbuild
您正在调用的方法永远不会执行,因为Albacore是一套耙子任务,并且 msbuild
是那些希望由Rake执行的任务之一,而不是直接在另一种方法中执行,尽管可以完成。
打电话 msb.execute
内部 do |msb| ... end
块不会执行任务,因为直到执行耙任务本身才能评估此块。
您有一些使其工作的选择。选项#1是Albacore的建议和预期使用。我强烈建议使用耙子和Albacore作为本来可以使用的,以便将来不会遇到问题。选项#2和#3现在将起作用,但是对Rake或Albacore的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
呼叫是一个耙子任务,而不是立即执行其代码的标准方法,您必须手动执行幕后创建的任务。这将使您现有的代码正常工作,但这并不是建议处理耙任务的推荐方法。
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
这是您需要手动执行的唯一场景。
不隶属于 StackOverflow