Подтвердить что ты не робот

В MSBuild можно определить, запущен ли я в Visual Studio

Являются ли какие-либо свойства MSBuild, которые устанавливает Visual Studio? Я ищу, чтобы иметь какое-то условное поведение в зависимости от версии (если есть) визуальной студии.

4b9b3361

Ответ 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> отсутствует.