首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个定义在类中的Albacore任务不能工作?

为什么这个定义在类中的Albacore任务不能工作?
EN

Stack Overflow用户
提问于 2010-11-25 09:18:04
回答 1查看 441关注 0票数 3

我把这个类放在一起,但它并不能实际运行一个构建。我插入了一些其他的日志记录,没有出现任何错误。我宣称自己是Ruby的新手,所以希望某个可爱的Ruby专家能发现我犯下的任何愚蠢的错误!

代码语言:javascript
复制
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

我也尝试过使用:build而不是:compile。

我已经看到了albacore的工作,并意识到了它的力量,只需要希望我的技能得到一点磨练。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-25 21:11:53

您正在调用的msbuild方法永远不会执行,因为Albacore是一套rake任务,而msbuild是希望由rake执行的任务之一,而不是直接在另一个方法中执行,尽管它可以完成。

do |msb| ... end块中调用msb.execute不会执行任务,因为只有在执行rake任务本身之后才会计算该块的值。

您有几个选项可以让它正常工作。选项1是Albacore的推荐和预期用途。我强烈建议使用rake和Albacore,因为它们本来就是要使用的,这样你以后就不会遇到问题了。选项#2和#3现在可以工作,但对rake或Albacore的API的更改可能会在不事先通知的情况下破坏这些功能。当然,您可以随心所欲地使用它们。

1.将其转换为rake脚本,而不是类和方法。

代码语言:javascript
复制
# 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所在文件夹中的rake来运行此程序

2.使用Task[:compile].execute在您的方法中执行任务。

由于msbuild调用是一个rake任务,而不是立即执行其代码的标准方法,因此您必须手动执行在幕后创建的任务。这将使您现有的代码工作,但这并不是真正推荐的处理rake任务的方式。

代码语言:javascript
复制
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调用可以直接调用的东西

代码语言:javascript
复制
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的场景。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4272981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档