Есть ли способ проверить существование цели, чтобы мы могли вызывать ее только тогда, когда она существует?
Как проверить, существует ли цель или нет, прежде чем вызывать ее?
Ответы (1)
Вы можете сделать цель зависимой от другой цели
...
<Target Name="Two" DependsOnTargets="One">
<Message Text="... comes Two." />
</Target>
<Target Name="One">
<Message Text="After One ..." />
</Target>
...
Ваши недавние сообщения показывают, что вы стараетесь полагаться на вызовы Targets, что, насколько я понимаю, противоречит философии MSBuild.
Попробуйте смоделировать зависимости между вашими целями.
person
Filburt
schedule
25.03.2010
А что, если цель «Два» уже существует? т.е. Тот, который вы не написали.
- person Nine Tails; 09.09.2016
Зависимость @NineTails всегда должна работать, если только вы не пытаетесь зависеть от несуществующей цели.
- person Filburt; 10.09.2016
Я имею в виду, скажем, я хочу, чтобы задача «Построить» зависела от моей цели. Я не могу отредактировать задачу «Сборка» и присвоить ей атрибут «DependsonTargets», и, похоже, нет эквивалентного обратного атрибута, например. «Зависит от этой цели». Так как же сделать так, чтобы цель «Один» всегда запускалась перед целью «Два», не редактируя цель «Два»?
- person Nine Tails; 10.09.2016
@NineTails Этот ответ на вопрос Что случилось с BeforeBuild и другими целями в VS2012 должен решить вашу проблему. Я не использовал MSBuild какое-то время и не знал о
BeforeTargets
и AfterTargets
, но быстрый поиск обнаружил их.
- person Filburt; 11.09.2016
@ Филбурт, к сожалению, нет. Если цель «One» имеет атрибут «BeforeTargets=TargetTwo», то если вы вызываете «TargetTwo», то «TargetOne» не будет выполняться, если вы вызываете «TargetOne», то «TargetOne» будет выполняться, а затем «TargetTwo». Я ищу способ вызвать «TargetTwo» и всегда запускать «TargetOne» перед ним, как если бы я мог установить «TargetTwo DependsOnTargets = TargetOne». Я не верю, что такое возможно с MSBuild.
- person Nine Tails; 11.09.2016
@NineTails Я попробовал еще более простое решение: просто вызовите MSBuild с целями в нужном порядке:
MSBuild.exe Test.proj /target:One;Two
- никаких изменений в ваших целях не требуется. Если это по-прежнему не решает вашу проблему, вы должны опубликовать новый вопрос.
- person Filburt; 11.09.2016