В MSBUILD, как вы можете указать условие, которое проверяет, запущена ли командная строка или VS?

У меня есть csproj, который я хотел бы инициировать открытие определенного файла в Visual Studio, только если цель была выполнена из Visual Studio, но не из командной строки MSBUILD. Как это сделать?

Ответ 1

Цитата со страницы MSDN:

При сборке внутри Visual Studio для свойства $ (BuildingInsideVisualStudio) устанавливается значение true. Это может быть использовано в вашем проекте или файлах .targets, чтобы сборка работала иначе.

Пример того, как его можно использовать в вашем файле. * Proj или .targets:

<PropertyGroup>
  <MyProperty Condition="'$(BuildingInsideVisualStudio)' == 'true'">This build is done by VS</MyProperty>
  <MyProperty Condition="'$(BuildingInsideVisualStudio)' != 'true'">This build is done from command line of by TFS</MyProperty>
</PropertyGroup>

Ответ 2

Добавьте свойство в файл проекта .csproj, например:

<PropertyGroup>
    <FromMSBuild>false</FromMSBuild>
</PropertyGroup>

Затем в задаче, которую вы хотите запустить, поставьте условие, которое оценивает это свойство. Например, вы хотите открыть файл notepad.exe всякий раз, когда сборка выполняется из командной строки и НЕ визуальная студия:

  <Target Name="BeforeBuild">
<Exec Command="C:\Windows\Notepad.exe" Condition="$(FromMSBuild)" />
  </Target>

Конечно, это зависит от правильной установки свойства $(FromMSBuild) при запуске сборки через командную строку, например:

MSBuild myProject.csproj /p:FromMSBuild=true

Ответ 3

Если я правильно вас понимаю, вы хотите открыть файл при создании в visual studio, но не из командной строки с MSBuild?

Если это так, укажите PreBuild или PostBuild в Visual Studio.

  • Щелкните правой кнопкой мыши по проекту в проводнике решений и выберите "Свойства"
  • Выберите вкладку "События"
  • Добавьте событие Pre или Post Build, чтобы открыть нужный файл