Может быть возможно переопределить встроенную цель, добавить ваше собственное условие, и ваша цель будет дублировать оригинал, но это может быть довольно сложным.Если вы можете отследить одну зависимую встроенную цель, это может быть осуществимо.Иногда эти «основные» цели состоят из не более чем списка DependsOnTargets, а иногда даже те, которые определены в свойстве, поэтому переопределить его и добавить условие, в котором они отсутствуют, тривиально.Иногда, хотя вам нужно сделать большую вырезку и вставку, чтобы сделать это правильно.
По сути, MSBuild будет поддерживать только последнюю цель, определенную для любого заданного имени, поэтому найдите, где ваш проект импортирует файл .target.включает цель, которую вы хотите переопределить, а затем поместите собственный импорт файла .target, который содержит переопределение после него.
Например, добавление условия к цели «CoreBuild» из Microsoft.Common.targets выглядит так:это легко сделать, сохраняя то же самое поведение в противном случае (условие Target со свойством $ (SkipCoreBuild) ниже):
<Target
Name="CoreBuild"
Condition="'$(SkipCoreBuild)' != 'true'"
DependsOnTargets="$(CoreBuildDependsOn)">
<OnError ExecuteTargets="_TimeStampAfterCompile;PostBuildEvent"
Condition="'$(RunPostBuildEvent)'=='Always' or
'$(RunPostBuildEvent)'=='OnOutputUpdated'"
/>
<OnError ExecuteTargets="_CleanRecordFileWrites" />
</Target>
Поместив вышеупомянутое в ваш собственный файл целей и импортировав его в проект C # послестандарт ...
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
... переопределяет реализацию по умолчанию, в которой нет условия для ее выборочного отключения.
В любом случае, если вы найдете цельэто не позволяет вам изменить условие, я бы подал ошибку в Connect, описывающую то, что вы пытаетесь сделать, люди MSBuild могутбыть довольно отзывчивым к подобным вещам (со временем).