2017-03-07 50 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那麼執行目標是很重要的。

相關問題