msbuild
Albacoreは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を呼び出す必要がある唯一のシナリオです。