Albacoreを使用して一度に複数のプロジェクトを構築するにはどうすればよいですか?
質問
RakeとAlbacoreを使用して複数のC#プロジェクトを構築しようとしています。ループなしでこれを行うことができるはずですが、うまく機能させることはできません。私がしなければならないことはこれです:
msbuild :selected_test_projects do |msb, args|
@teststorun.each do |project|
msb.path_to_command = @net40Path
msb.properties :configuration => :Release,
msb.targets [ :Test]
msb.solution = project
msb.build
end
end
このようなクリーンなことをしたいです
msbuild :selected_test_projects do |msb, args|
msb.path_to_command = @net40Path
msb.properties :configuration => :Release,
msb.targets [ :Test]
msb.solution = @teststorun
end
解決
この時点で、複数のソリューションを構築するためのMSBUILDタスクに直接サポートはありません。ただし、利用可能なオプションがいくつかあります。それは主に、あなたがこれを行うのに最適な構文にかかっていますが、それらはすべて何らかのループを伴います。
ちなみに、Albacore V0.2.2は数日前にリリースされました。デフォルトで.NET 4で、.path_to_commandを.commandに短縮します。ただし、デフォルトであるため、使用する.commandを指定する必要はありません。この構文を例に使用します。追加のリリースノートを読むことができます http://albacorebuild.net
オプション1
ソリューションのリストを配列にロードし、各ソリューションのMSBUILDを呼び出します。これにより、次のように追加されます。MSBuildの複数のインスタンスを使用してタスクをビルドし、以下を呼び出すと、すべてがビルドされます。
solutions = ["something.sln", "another.sln", "etc"]
solutions.each do |solution|
#loops through each of your solutions and adds on to the :build task
msbuild :build do |msb, args|
msb.properties :configuration => :Release,
msb.targets [:Test]
msb.solution = solution
end
end
電話 rake build
または指定 :build
他のタスクの依存関係として、すべてのソリューションを構築します。
オプション#2
オプション2は基本的に私が見たものと同じです...あなたが電話できることを除いて MSBuild
の代わりに直接クラス msbuild
タスク
msb = MSBuild.new
msb.solution = ...
msb.properties ...
#other settings...
これにより、希望どおりにタスクを作成し、どこでもループを実行できます。例えば:
task :build_all_solutions do
solutions = FileList["solutions/**/*.sln"]
solutions.each do |solution|
build_solution solution
end
end
def build_solution(solution)
msb = MSBuild.new
msb.properties :configuration => :Release,
msb.targets [:Test]
msb.solution = solution
msb.execute # note: ".execute" replaces ".build" in v0.2.x of albacore
end
今、あなたが電話するとき rake build_all_solutions
または追加します :build_all_solutions
別のタスクへの依存として、すべてのソリューションが構築されます。
...
ここで示したことに基づいて、おそらくできる数十のバリエーションがあります。ただし、それらは大きく異なりません - すべてのソリューションを見つけるか、それらをループするためのいくつかの異なる方法だけです。