В MSBuild можно определить, работаю ли я в Visual Studio - PullRequest
31 голосов
/ 28 апреля 2010

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

Ответы [ 4 ]

41 голосов
/ 29 апреля 2010

Значение свойства, которое вы должны использовать, равно BuildingInsideVisualStudio, когда вы строите внутри Visual Studio, это свойство будет иметь значение true. Поскольку ProductVersion объявлено в файле проекта, вы не можете использовать его, поскольку оно будет иметь одинаковое значение при сборке внутри VS или через msbuild.exe.

<PropertyGroup>
    <MyProp Condition=" '$(BuildingInsideVisualStudio)' == 'true' ">Foo</MyProp>  
    <MyProp Condition=" '$(BuildingInsideVisualStudio)' != 'true' ">Bar</MyProp> 
</PropertyGroup>
1 голос
/ 28 апреля 2010

Для непосредственного решения вопроса в вашем заголовке - если вы просто хотите узнать, строите ли вы из VS или нет, проверьте значение IsDesktopBuild, которое вернет true или false соответственно.

0 голосов
/ 28 апреля 2010

<ProductVersion> предоставит вам версию MSBuild, в которой выполняется процесс сборки.

Обратите внимание, что в VS 2010 процесс сборки может быть нацелен либо на .Net 4.0, либо на 3.5. Вам нужно тщательно продумать, зависит ли ваша условная компиляция от самой версии msbuild или от целевой структуры сборки и инструментов, которые использует сборка. , Если ваше условие основано на целевой структуре, используйте <TargetFrameworkVersion>.

Конечно, если ваша сборка также может быть запущена под VS 2008, вам нужно поддерживать правильный запасной вариант, если отсутствует <TargetFrameworkVersion>.

0 голосов
/ 28 апреля 2010

Да, <ProductVersion> указан в файле проекта. Соответствует номеру версии Visual Studio.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...