2017-03-07 82 views
0

我有导入到我的.csproj文件中的以下目标文件,其中一个目标(AfterAddPostAction)从未触发。为什么不? (抱歉它是如此冗长,但MSBuild的是大便的抽象和CallTask​​没有看到设置含有CallTask​​元件的目标内的属性值。)为什么我的目标没有执行?

<?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>&quot;&amp; { &amp;&apos;$(ScriptPath)&apos; } &quot;</Arguments> 
    </PropertyGroup> 
    </Target> 

    <Target Name="AfterClean" DependsOnTargets="EstablishLog"> 
    <PropertyGroup> 
     <LogFile >AfterClean$(ApplicationVersion).log</LogFile> 
     <LogFile Condition="Exists('$(MSBuildProjectDirectory)\Logs')">.\Logs\$(LogFile)</LogFile> 
     <Arguments>&quot;&amp; { &amp;&apos;$(LogState)&apos; } &quot;</Arguments> 
    </PropertyGroup> 
    <Exec Command="$(PowerShellExe) $(Switches) -command $(Arguments) &gt; $(LogFile)" /> 
    </Target> 

    <Target Name="BeforeBuild" DependsOnTargets="EstablishLog"> 
    <PropertyGroup> 
     <LogFile >BeforeBuild$(ApplicationVersion).log</LogFile> 
     <LogFile Condition="Exists('$(MSBuildProjectDirectory)\Logs')">.\Logs\$(LogFile)</LogFile> 
     <Arguments>&quot;&amp; { &amp;&apos;$(LogState)&apos; } &quot;</Arguments> 
    </PropertyGroup> 
    <Exec Command="$(PowerShellExe) $(Switches) -command $(Arguments) &gt; $(LogFile)" /> 
    </Target> 

    <Target Name="AfterBuild" DependsOnTargets="EstablishLog"> 
    <PropertyGroup> 
     <LogFile >AfterBuild$(ApplicationVersion).log</LogFile> 
     <LogFile Condition="Exists('$(MSBuildProjectDirectory)\Logs')">.\Logs\$(LogFile)</LogFile> 
     <Arguments>&quot;&amp; { &amp;&apos;$(LogState)&apos; } &quot;</Arguments> 
    </PropertyGroup> 
    <Exec Command="$(PowerShellExe) $(Switches) -command $(Arguments) &gt; $(LogFile)" /> 
    </Target> 

    <Target Name="BeforePublish" DependsOnTargets="EstablishLog"> 
    <PropertyGroup> 
     <LogFile >BeforePublish$(ApplicationVersion).log</LogFile> 
     <LogFile Condition="Exists('$(MSBuildProjectDirectory)\Logs')">.\Logs\$(LogFile)</LogFile> 
     <Arguments>&quot;&amp; { &amp;&apos;$(LogState)&apos; } &quot;</Arguments> 
    </PropertyGroup> 
    <Exec Command="$(PowerShellExe) $(Switches) -command $(Arguments) &gt; $(LogFile)" /> 
    </Target> 

    <Target Name="AddPostAction" AfterTargets="BeforePublish" DependsOnTargets="EstablishLog"> 
    <PropertyGroup> 
     <PostAction>FileCopyPDA.FileCopyPDA</PostAction> 
     <Arguments>&quot;&amp; { &amp;&apos;$(DoPostAction)&apos; &apos;$(PostAction)&apos; $(Configuration)} &quot;</Arguments> 
     <LogFile >AddPostAction$(ApplicationVersion).log</LogFile> 
     <LogFile Condition="Exists('$(MSBuildProjectDirectory)\Logs')">.\Logs\$(LogFile)</LogFile> 
    </PropertyGroup> 
    <Exec Command="$(PowerShellExe) $(Switches) -command $(Arguments) &gt; $(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>&quot;&amp; { &amp;&apos;$(LogState)&apos; } &quot;</Arguments> 
    </PropertyGroup> 
    <Exec Command="$(PowerShellExe) $(Switches) -command $(Arguments) &gt; $(LogFile)" /> 
    </Target> 

    <Target Name="AfterPublish" DependsOnTargets="EstablishLog"> 
    <PropertyGroup> 
     <LogFile >AfterPublish$(ApplicationVersion).log</LogFile> 
     <LogFile Condition="Exists('$(MSBuildProjectDirectory)\Logs')">.\Logs\$(LogFile)</LogFile> 
     <Arguments>&quot;&amp; { &amp;&apos;$(LogState)&apos; } &quot;</Arguments> 
    </PropertyGroup> 
    <Exec Command="$(PowerShellExe) $(Switches) -command $(Arguments) &gt; $(LogFile)" /> 
    </Target> 

</Project> 
+0

当日志级别设置为详细或诊断时,msbuild日志文件中的内容是什么? –

+0

我把它设置为诊断,并没有提及'AfterAddPostAction'。甚至不跳过。我发现的是'DependsOnTargets'是不够的,但'AfterTargets'是。我仍然不明白为什么。 –

+0

你正在执行哪个目标作为“主要”目标?现在我看到了十几个目标,并且不清楚它们是如何被调用的。 –

回答

2

DependsOnTargets是链任务到序列中的主要方式。但是如果您通过DependsOnTargetsB取决于A)和呼叫目标A执行序列A->B->C,则BC将不会执行。但是如果您拨打C,则执行AB

相反,在执行A后,将执行AfterTargets属性中提到的目标A中提及的目标。

这就是为什么在你的情况下,如果你想使用DependsOnTargets那么执行目标是很重要的。