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

また、:compileではなく:buildを使用してみました。

私はビンナガが機能しているのを見て、その力に気づきました。うまくいけば、スキルを少し磨く必要があります。

4

1 に答える 1

4

msbuildAlbacoreはrakeタスクのスイートであり、実行は可能ですが、別のメソッドで直接実行するのではなく、rakeによって実行したいタスクの1つであるため、呼び出しているメソッドは実行msbuildされません。

このブロックはrakeタスク自体が実行されるまで評価されないため、ブロックmsb.execute内を呼び出してもタスクは実行されません。do |msb| ... end

これを機能させるためのいくつかのオプションがあります。オプション#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次に、rakefile.rbと同じフォルダーで、コマンドラインから呼び出すことにより、rakeを介してこれを実行します。

2.Task[:compile].executeメソッド内でタスクを実行するために使用します。

呼び出しはrakeタスクであり、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'

    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. rakeタスクMSBuildの代わりに、クラスを直接使用しますmsbuild

メソッド内から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 に答える