gpt4 book ai didi

ruby - 为什么这个在类中定义的 Albacore 任务不起作用?

转载 作者:数据小太阳 更新时间:2023-10-29 07:57:48 25 4
gpt4 key购买 nike

我将此类放在一起,但实际运行构建时不起作用。我插入了一些其他日志记录,但没有出现任何错误。我声明自己是 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。

我见过长鳍金枪鱼的工作并意识到它的力量,希望我的技能能得到一点磨练

最佳答案

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

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

您有几个选项可以让它发挥作用。选项 #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 类,而不是msbuild rake 任务

如果您确实需要从方法中调用 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 的唯一场景。

关于ruby - 为什么这个在类中定义的 Albacore 任务不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4272981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com