Получение цели для запуска ДО запуска чего-либо еще при сборке из Visual Studio - PullRequest
3 голосов
/ 23 декабря 2009

Я пытаюсь заставить единовременную дорогостоящую цель запускаться только при создании определенного проекта верхнего уровня (который имеет много зависимостей).

У меня нет проблем, чтобы заставить это работать из простой сборки msbuild / командной строки. Я делаю это с настройкой и InitialTargets для проекта или, альтернативно, с

.

Сложная часть с Visual Studio. Когда я строю тот же проект от VS. VS запускает зависимости прежде, чем даже вызвать мой .csproj, поэтому моя цель (которая влияет на то, как создаются другие проекты) не запускается, пока они не будут построены.

Есть ли какой-нибудь способ заставить VS запустить цель, прежде чем вызывать зависимости?

В настоящее время я работаю над этим, выполняя ту же самую дорогостоящую цель из моего самого низкоуровневого проекта (который всегда создается ...), используя:

Condition = "$ (BuildingInsideVisualStudio)"

Есть идеи, как сделать это "правильно"? Опять же, я ищу решение, которое будет работать ОТ VS.

Ответы [ 3 ]

3 голосов
/ 30 апреля 2010

Единственный способ сделать это (если я понимаю вопрос) - создать фиктивный проект, который вы говорите VS сначала создать, который делает все, что вы хотите. VS примет почти любой файл MSBuild, если вы дадите ему расширение .csproj и цель Build.

2 голосов
/ 25 декабря 2009

Visual Studio использует компилятор in proc, чтобы помочь с UX процесса сборки. Из-за этого между VS и MSBuild может быть какая-то разница. Попробуйте установить для свойства UseHostCompilerIfAvailable значение false в файле проекта. Это заставит VS использовать MSBuild для сборки. Недостатком является производительность внутри Visual Studio.

Вы бы использовали следующий fragement в вашем файле .csproj (или .vbproj).

<PropertyGroup>
    <UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>
</PropertyGroup>
1 голос
/ 23 декабря 2009

Почему бы не переопределить цель <Target Name="BeforeBuild" />? Это будет выполнено до фактического построения проекта (поскольку цель Build зависит от BeforeBuild). Visual Studio вызывает цель Build (или Rebuild), поэтому переопределение этой цели в .csproj приведет к тому, что она будет вызвана первой.

Если вы не хотите что-то сделать еще раньше, чем в msbuild?

...