2017-03-07 1 views
0

J'ai le fichier de cibles suivant qui est importé dans mon fichier .csproj, l'une des cibles (AfterAddPostAction) ne se déclenche jamais. Pourquoi pas? (Désolé, il est tellement bavard mais MSBuild est de la merde à l'abstraction et callTask ​​ne voit pas des valeurs de propriété dans la cible contenant l'élément callTask.)Pourquoi ma cible n'est-elle pas exécutée?

<?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

Que se trouve-t-il dans le fichier journal msbuild lorsque le niveau de journalisation est défini sur détaillé ou diagnostic? –

+0

Je l'ai fait définir à Diagnostic en fait et aucune mention de 'AfterAddPostAction'. Pas même à sauter. Ce que j'ai découvert, c'est que 'DependsOnTargets' n'est pas suffisant mais' AfterTargets' est. Je ne comprends toujours pas pourquoi. –

+0

Et quelle cible vous exécutez en tant que cible 'principale'? À l'heure actuelle, je vois une douzaine de cibles et on ne sait pas comment elles sont invoquées. –

Répondre

2

DependsOnTargets est le principal moyen de tâches de la chaîne dans la séquence. Mais si vous avez la séquence A->B->C mis en œuvre via DependsOnTargets (B dépend de A) et appelez la cible A, alors B et C ne seront pas exécutées. Mais si vous appelez C, alors les deux A et B sont exécutés. Au contraire la cible qui a la cible A mentionnée dans l'attribut AfterTargets sera exécutée après l'exécution de A. C'est pourquoi, dans votre cas, si vous voulez utiliser DependsOnTargets, il est important de savoir quelle cible vous voulez exécuter.