Являются ли какие-либо свойства MSBuild, которые устанавливает Visual Studio? Я ищу, чтобы иметь какое-то условное поведение в зависимости от версии (если есть) визуальной студии.
В MSBuild можно определить, запущен ли я в Visual Studio
Ответ 1
Значение свойства, которое вы должны использовать, - BuildingInsideVisualStudio
, когда вы строите внутри Visual Studio, это свойство будет иметь значение true. Поскольку ProductVersion
объявлен в файле проекта, вы не можете использовать его, поскольку он будет иметь одинаковое значение при сборке внутри VS или через msbuild.exe.
<PropertyGroup>
<MyProp Condition=" '$(BuildingInsideVisualStudio)' == 'true' ">Foo</MyProp>
<MyProp Condition=" '$(BuildingInsideVisualStudio)' != 'true' ">Bar</MyProp>
</PropertyGroup>
Ответ 2
Чтобы напрямую задать вопрос в своем названии - если вы просто хотите знать, строите ли вы из VS или нет, проверьте значение IsDesktopBuild
, которое вернет true
или false
соответствующим образом.
Ответ 3
Да, <ProductVersion>
указан в файле проекта. Он соответствует номеру версии Visual Studio.
Ответ 4
<ProductVersion>
предоставит вам версию MSBuild, которая запускает процесс сборки.
Обратите внимание, что в VS 2010 процесс сборки может быть нацелен на .Net 4.0 или 3.5. Вы должны тщательно рассмотреть, если ваша условная компиляция зависит от самой версии msbuild или от целевой структуры сборки и инструментов, которые использует сборка, Если ваше условие основано на целевой структуре, используйте <TargetFrameworkVersion>
.
Конечно, если ваша сборка также может быть запущена под VS 2008, вам необходимо поддерживать правильный резерв, если <TargetFrameworkVersion>
отсутствует.