Как запустить задачи msbuild в Albacore для нескольких версий .NET?

Я собираюсь использовать rake и albacore для автоматизации сборки созданной мной библиотеки. Я хочу предложить библиотеку тем, кто использует .NET 2.0, .NET 3.5, .NET 4.0 и .NET 4.5. В коде нет ничего особенного, и он должен быть легко перенесен.

Что мне действительно нужно, так это сценарий сборки rake, который будет собирать сборку для каждой платформы. Похоже, что исследование связано с настройкой ToolsVersion, но мне не удалось заставить это работать.

Есть ли лучшие практики, примеры, как это сделать? Или мне нужен другой инструмент для сборки?

Обновление: я смог заставить это работать, просто предоставив аргументы командной строки в оболочке, но до сих пор не заставил его работать с Albacore.


person Jay Smith    schedule 04.09.2012    source источник
comment
Привет? Этот ответ вообще полезен? или вы уже решили свою проблему?   -  person Anthony Mastrean    schedule 11.10.2012


Ответы (1)


Задача 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, по-видимому, .

person Anthony Mastrean    schedule 27.09.2012
comment
Спасибо, это ответило на тот же вопрос для меня. - person twreid; 01.05.2013
comment
Я не знаю, на какой это версии albacore, но у меня это не сработало. Я получил следующую ошибку NoMethodError: undefined method 'command'. Итак, я нашел документацию и попробовал это вместо этого, что сработало. msb.exe = C: / Program Files (x86) /MSBuild/14.0/Bin/msbuild.exe - person adonthy; 22.09.2019