У меня есть csproj, который я хотел бы инициировать открытие определенного файла в Visual Studio, только если цель была выполнена из Visual Studio, но не из командной строки MSBUILD. Как это сделать?
В MSBUILD, как вы можете указать условие, которое проверяет, запущена ли командная строка или VS?
Ответ 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, чтобы открыть нужный файл