3

我把这个类放在一起,但实际上运行构建不起作用。我插入了一些其他日志记录,并且没有引发任何错误。我声明自己是 Ruby 的菜鸟,所以希望一些可爱的 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

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

我已经看到长鳍金枪鱼的工作并意识到它的力量,只需要希望我的技能得到一点磨练

4

1 回答 1

4

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

msb.execute在块内部调用do |msb| ... end不会执行任务,因为在执行 rake 任务本身之前不会评估此块。

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

1.把它变成一个rake脚本而不是一个类和方法

# 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 运行它,通过rake从命令行调用,在与 rakefile.rb 相同的文件夹中

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

由于msbuild调用是 rake 任务,而不是立即执行其代码的标准方法,因此您必须手动执行在幕后创建的任务。这将使您现有的代码正常工作,但这并不是处理 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直接使用类,而不是msbuildrake任务

如果您确实需要从方法中调用 msbuild,那么您应该避免使用 msbuild 任务并直接调用 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'

    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 的唯一场景。

于 2010-11-25T13:11:53.113 回答