Как проверить, существует ли цель или нет, прежде чем вызывать ее?

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


person Nam G VU    schedule 25.03.2010    source источник


Ответы (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
comment
А что, если цель «Два» уже существует? т.е. Тот, который вы не написали. - person Nine Tails; 09.09.2016
comment
Зависимость @NineTails всегда должна работать, если только вы не пытаетесь зависеть от несуществующей цели. - person Filburt; 10.09.2016
comment
Я имею в виду, скажем, я хочу, чтобы задача «Построить» зависела от моей цели. Я не могу отредактировать задачу «Сборка» и присвоить ей атрибут «DependsonTargets», и, похоже, нет эквивалентного обратного атрибута, например. «Зависит от этой цели». Так как же сделать так, чтобы цель «Один» всегда запускалась перед целью «Два», не редактируя цель «Два»? - person Nine Tails; 10.09.2016
comment
@NineTails Этот ответ на вопрос Что случилось с BeforeBuild и другими целями в VS2012 должен решить вашу проблему. Я не использовал MSBuild какое-то время и не знал о BeforeTargets и AfterTargets, но быстрый поиск обнаружил их. - person Filburt; 11.09.2016
comment
@ Филбурт, к сожалению, нет. Если цель «One» имеет атрибут «BeforeTargets=TargetTwo», то если вы вызываете «TargetTwo», то «TargetOne» не будет выполняться, если вы вызываете «TargetOne», то «TargetOne» будет выполняться, а затем «TargetTwo». Я ищу способ вызвать «TargetTwo» и всегда запускать «TargetOne» перед ним, как если бы я мог установить «TargetTwo DependsOnTargets = TargetOne». Я не верю, что такое возможно с MSBuild. - person Nine Tails; 11.09.2016
comment
@NineTails Я попробовал еще более простое решение: просто вызовите MSBuild с целями в нужном порядке: MSBuild.exe Test.proj /target:One;Two - никаких изменений в ваших целях не требуется. Если это по-прежнему не решает вашу проблему, вы должны опубликовать новый вопрос. - person Filburt; 11.09.2016