1

rake と albacore を使用して、作成したライブラリのビルドを自動化することを検討しています。.NET 2.0、.NET 3.5、.NET 4.0、および .NET 4.5 を使用しているユーザーにライブラリを提供したいと考えています。コードに特別なことは何もなく、問題なく移植できるはずです。

私が本当に欲しいのは、各プラットフォームのアセンブリをビルドする rake ビルド スクリプトです。調査によると、ToolsVersion の設定の問題のようですが、これを機能させることができませんでした。

これを行う方法のベストプラクティス、例はありますか? または、別のビルド ツールが必要ですか?

更新: シェルでコマンドライン引数を指定するだけでこれを機能させることができましたが、Albacore ではまだ機能していません。

4

1 に答える 1

4

Albacore msbuild タスクと関連する構成オブジェクトは、ブードゥーを使用して、既定の MSBuild exe バージョンを自動的に検出してセットアップします。これは汎用コマンド ライン タスクに基づいているため、commandパラメーターがあります。

self.command = File.join(get_net_version(netversion), "MSBuild.exe")

コマンドオプションを手動で設定し、多くのタスクを定義できます

task :build_all_versions => [ :build_net20, :build_net35, :build_net40 ]

msbuild :build_net20 do |msb|
  msb.command = 'C:/Windows/Microsoft.NET/Framework/v2.0.50727/msbuild.exe'
end

msbuild :build_net35 do |msb|
  msb.command = 'C:/Windows/Microsoft.NET/Framework/v3.5/msbuild.exe'
end

msbuild :build_net40 do |msb|
  msb.command = 'C:/Windows/Microsoft.NET/Framework/v4.0.30319/msbuild.exe'
end

または、内部の Albacore モジュール/メソッドを使用してパスを取得できmsbuild.exeます。これはプライベート モジュール メソッドを定義しているため、それを実行する必要がありますinclude

include Configuration::NetVersion

msbuild :build_net20 do |msb|
  msb.command = File.join(get_net_version :net20, 'msbuild.exe')
  ...
end

そして、この時点で、.NET バージョン シンボルの配列に基づいてタスクを動的に定義します。

net_versions = [ :net20, :net35, :net40 ]
build_tasks  = net_versions.map { |ver| "build_#{ver}" }

task :build_all => build_tasks

net_versions.zip(build_tasks) do |ver, task|
    msbuild task do |msb|
      msb.command = File.join(get_net_version ver, 'msbuild.exe')
      # all the other stuff
    end
end

.NET 3.0 ツールはなく、 .NET 2.0 ツールを使用していたようです。

于 2012-09-27T21:08:30.623 に答える