我将这堂课放在一起,但实际上并没有真正运行构建。我插入了其他记录,没有提出错误。我宣布自己是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

这是您需要手动执行的唯一场景。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top