我将以下目标文件导入到我的.csproj
文件中,其中一个目标(AfterAddPostAction)从不触发。为什么不?(对不起,它太冗长了,但 MSBuild 在抽象方面很糟糕,而且 CallTask 没有看到包含 CallTask 元素的 Target 内设置的属性值。)
<?xml version="1.0" encoding="Windows-1252"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="EstablishLog">
<MakeDir Condition="!Exists('$(MSBuildProjectDirectory)\Logs')" Directories=".\Logs"/>
<PropertyGroup>
<PowerShellExe Condition=" '$(PowerShellExe)'=='' ">%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe</PowerShellExe>
<ScriptPath Condition=" '$(ScriptPath)'=='' ">C:\Users\Admin\Documents\GitHub\powershell-scripts\</ScriptPath>
<LogState>$(ScriptPath)ProjectSnapShot.ps1</LogState>
<DoPostAction>$(ScriptPath)postAction-BeforePublish.ps1</DoPostAction>
<Switches>-NonInteractive -executionpolicy Unrestricted</Switches>
<Arguments>"& { &'$(ScriptPath)' } "</Arguments>
</PropertyGroup>
</Target>
<Target Name="AfterClean" DependsOnTargets="EstablishLog">
<PropertyGroup>
<LogFile >AfterClean$(ApplicationVersion).log</LogFile>
<LogFile Condition="Exists('$(MSBuildProjectDirectory)\Logs')">.\Logs\$(LogFile)</LogFile>
<Arguments>"& { &'$(LogState)' } "</Arguments>
</PropertyGroup>
<Exec Command="$(PowerShellExe) $(Switches) -command $(Arguments) > $(LogFile)" />
</Target>
<Target Name="BeforeBuild" DependsOnTargets="EstablishLog">
<PropertyGroup>
<LogFile >BeforeBuild$(ApplicationVersion).log</LogFile>
<LogFile Condition="Exists('$(MSBuildProjectDirectory)\Logs')">.\Logs\$(LogFile)</LogFile>
<Arguments>"& { &'$(LogState)' } "</Arguments>
</PropertyGroup>
<Exec Command="$(PowerShellExe) $(Switches) -command $(Arguments) > $(LogFile)" />
</Target>
<Target Name="AfterBuild" DependsOnTargets="EstablishLog">
<PropertyGroup>
<LogFile >AfterBuild$(ApplicationVersion).log</LogFile>
<LogFile Condition="Exists('$(MSBuildProjectDirectory)\Logs')">.\Logs\$(LogFile)</LogFile>
<Arguments>"& { &'$(LogState)' } "</Arguments>
</PropertyGroup>
<Exec Command="$(PowerShellExe) $(Switches) -command $(Arguments) > $(LogFile)" />
</Target>
<Target Name="BeforePublish" DependsOnTargets="EstablishLog">
<PropertyGroup>
<LogFile >BeforePublish$(ApplicationVersion).log</LogFile>
<LogFile Condition="Exists('$(MSBuildProjectDirectory)\Logs')">.\Logs\$(LogFile)</LogFile>
<Arguments>"& { &'$(LogState)' } "</Arguments>
</PropertyGroup>
<Exec Command="$(PowerShellExe) $(Switches) -command $(Arguments) > $(LogFile)" />
</Target>
<Target Name="AddPostAction" AfterTargets="BeforePublish" DependsOnTargets="EstablishLog">
<PropertyGroup>
<PostAction>FileCopyPDA.FileCopyPDA</PostAction>
<Arguments>"& { &'$(DoPostAction)' '$(PostAction)' $(Configuration)} "</Arguments>
<LogFile >AddPostAction$(ApplicationVersion).log</LogFile>
<LogFile Condition="Exists('$(MSBuildProjectDirectory)\Logs')">.\Logs\$(LogFile)</LogFile>
</PropertyGroup>
<Exec Command="$(PowerShellExe) $(Switches) -command $(Arguments) > $(LogFile)" />
</Target>
<!--This one is never called-->
<Target Name="AfterAddPostAction" DependsOnTargets="EstablishLog;AddPostAction">
<PropertyGroup>
<LogFile >AfterAddPostAction$(ApplicationVersion).log</LogFile>
<LogFile Condition="Exists('$(MSBuildProjectDirectory)\Logs')">.\Logs\$(LogFile)</LogFile>
<Arguments>"& { &'$(LogState)' } "</Arguments>
</PropertyGroup>
<Exec Command="$(PowerShellExe) $(Switches) -command $(Arguments) > $(LogFile)" />
</Target>
<Target Name="AfterPublish" DependsOnTargets="EstablishLog">
<PropertyGroup>
<LogFile >AfterPublish$(ApplicationVersion).log</LogFile>
<LogFile Condition="Exists('$(MSBuildProjectDirectory)\Logs')">.\Logs\$(LogFile)</LogFile>
<Arguments>"& { &'$(LogState)' } "</Arguments>
</PropertyGroup>
<Exec Command="$(PowerShellExe) $(Switches) -command $(Arguments) > $(LogFile)" />
</Target>
</Project>
DependsOnTargets
是将任务链接到序列中的主要方式。但是,如果您A->B->C
通过DependsOnTargets
( B
depends on A
)实现了序列并调用了 target A
,则B
和C
将不会被执行。但是如果你调用C
,那么A
和 都会B
被执行。
相反A
,AfterTargets
属性中提到的目标将在执行后A
执行。
这就是为什么在您的情况下,如果您想使用DependsOnTargets
它,您执行哪个目标很重要。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句