2017-03-07 19 views
0

.csprojファイルにインポートされる次のターゲットファイルがあります。ターゲットの1つ(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

私はそれを実際にDiagnosticに設定し、 'AfterAddPostAction'については言及しませんでした。スキップすることさえできません。私が発見したのは、「DependsOnTargets」は十分ではないが、「AfterTargets」は十分であるということでした。私はまだ理由を理解していない。 –

+0

あなたはどのターゲットを「プライマリ」ターゲットとして実行していますか?今私は十数のターゲットを見ており、どのように呼び出されているのかは明らかではありません。 –

答えて

2

DependsOnTargetsは、シーケンスにチェーンタスクへの主要な方法です。しかし、DependsOnTargetsBAに依存)とAを呼び出すシーケンスA->B->Cがある場合、BCは実行されません。しかし、Cを呼び出すと、ABの両方が実行されます。

逆にAの実行後にAfterTargets属性で指定されたターゲットAのターゲットが実行されます。

あなたの場合、DependsOnTargetsを使用する場合、実行するターゲットは重要です。

関連する問題