Переопределить целевую структуру из командной строки - программирование

Переопределить целевую структуру из командной строки

Я хочу построить проект c# (.csproj) из командной строки с помощью msbuild и хочу настроить время выполнения .Net2.0.

Я вижу, что проект xml файла имеет 2 tags интерес

<Project ToolsVersion="4.0" ... 

и

<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

Мне было интересно, если

  • Может ли ToolsVersion 4.0 создать совместимый код для .Net2.0 runtime?
  • Могу ли я переопределить тег целевой инфраструктуры из файла проекта через командную строку (делает ли этот переключатель командной строки /ToolsVersion?

Я специально хочу добиться этого через командную строку и не изменять файл проекта.

В настоящее время я делаю что-то вроде этого

msbuild myproj.csproj /p:Configuration=Release
4b9b3361

Ответ 1

Для выполнения этой работы нужны аргументы командной строки для msbuild:

msbuild.exe MyProj.proj /p:TargetFrameworkVersion=v2.0;Configuration=Release /tv:3.5

переопределяя значение в файле proj, а также ToolsVersion.

Чтобы узнать, какая версия msbuild используется по умолчанию, запустите командную строку Visual Studio (найдите в меню "Пуск" > Microsoft Visual studio 2010 > Visual Studio Tools) и введите msbuild. Первая строка вывода будет содержать вашу BuidEngineversion:

Microsoft (R) Build Engine версии 4.0.30319.1

Из документа msdn:

MSBuild использует набор задач, целей и инструментов для создания выражение. Как правило, набор инструментов MSBuild включает в себя файл microsoft.common.tasks, файл microsoft.common.targets и компиляторы, такие как csc.exe и vbc.exe. Большинство наборов инструментов можно использовать для компилировать приложения в несколько версий .NET Framework и более чем одна системная платформа

Вы также можете проверить окружение vars для установленной версии фреймворка: set F из командной строки Visual Studio дает мне этот результат:

Framework35Version = v3.5
FrameworkDir = C:\Windows\Microsoft.NET\Framework\
FrameworkDIR32 = C:\Windows\Microsoft.NET\Framework\
FrameworkVersion = v4.0.30319
FrameworkVersion32 = v4.0.30319

Пояснение к ToolSet
ToolSetVersion