如何在Albacore中针对多个.NET版本运行msbuild任务?

如何在Albacore中针对多个.NET版本运行msbuild任务?,build,rake,albacore,Build,Rake,Albacore,我正在考虑使用rake和albacore来自动构建我创建的库。我想为使用.NET2.0、.NET3.5、.NET4.0和.NET4.5的用户提供该库。这段代码没有什么特别之处,应该可以很好地移植 我真正想要的是一个rake构建脚本,它将为每个平台构建程序集。研究表明,这是一个设置工具版本的问题,但我还没能让它起作用 是否有任何最佳实践,如何做到这一点的例子?还是我需要一个不同的构建工具 更新: 仅在shell中提供命令行参数,我就能够使其正常工作,但仍然无法使其与Albacore一起工作。Alb

我正在考虑使用rake和albacore来自动构建我创建的库。我想为使用.NET2.0、.NET3.5、.NET4.0和.NET4.5的用户提供该库。这段代码没有什么特别之处,应该可以很好地移植

我真正想要的是一个rake构建脚本,它将为每个平台构建程序集。研究表明,这是一个设置工具版本的问题,但我还没能让它起作用

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

更新:
仅在shell中提供命令行参数,我就能够使其正常工作,但仍然无法使其与Albacore一起工作。

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
或者,您可以使用获取
msbuild.exe
路径。它定义了一个私有模块方法,因此您必须
包含它

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工具。

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
或者,您可以使用获取
msbuild.exe
路径。它定义了一个私有模块方法,因此您必须
包含它

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工具。

喂?这个答案有用吗?或者你已经解决你的问题了?喂?这个答案有用吗?或者你已经解决了你的问题了吗?谢谢,这为我回答了完全相同的问题。我不知道这是哪个版本的albacore,但这对我不起作用。我得到了以下错误“NoMethodError:未定义的方法'command'”。所以我找到了一些文档,并尝试了这个方法,效果很好。msb.exe=“C:/Program Files(x86)/MSBuild/14.0/Bin/MSBuild.exe”谢谢,这为我回答了完全相同的问题。我不知道这是哪一版本的albacore,但这对我不起作用。我得到了以下错误“NoMethodError:未定义的方法'command'”。所以我找到了一些文档,并尝试了这个方法,效果很好。msb.exe=“C:/ProgramFiles(x86)/MSBuild/14.0/Bin/MSBuild.exe”