1

我正在考虑使用 rake 和 albacore 来自动构建我创建的库。我想向使用 .NET 2.0、.NET 3.5、.NET 4.0 和 .NET 4.5 的用户提供该库。代码没有什么特别之处,它应该可以很好地移植。

我真正想要的是一个 rake 构建脚本,它将为每个平台构建程序集。研究看起来像是设置 ToolsVersion 的问题,但我无法让它发挥作用。

是否有任何最佳实践,如何做到这一点的例子?还是我需要不同的构建工具?

更新: 我只需在 shell 中提供命令行参数就可以让它工作,但仍然没有让它与 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 回答