清除解决方案时,MSBuild在AfterBuild中丢失输出文件

时间:2016-01-26 12:20:23

标签: visual-studio msbuild

我确定有一些我不知道的小事。这就是问题所在:

我有一个包含多个项目的解决方案,每次构建后都会压缩。以下是一个项目中zip创建的示例(在其他项目中它们几乎完全相同):

drawLayer.masksToBounds = true

...

<ItemGroup>
  <CopySourceFiles Include="$(OutDir)\**\*.*" Exclude="$(OutDir)\**\*.pdb;$(OutDir)\*.mdf;$(OutDir)\*.ldf;$(OutDir)\*.vshost.*" />
</ItemGroup>

最后一个项目包含链接到压缩文件的链接。所有内容都显示正常,但显然仅在 bin zip_working 文件夹已存在时才显示。即如果我清理解决方案,删除bin文件夹,然后重建,在&#34; zip&#34;中创建的最终zip文件。每个项目的文件夹都是空的......

然后,只有在我再次构建 之后,zip文件才会有内容。

所以我猜测在构建过程中,<Target Name="AfterBuild" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <MakeDir Directories="$(OutDir)\..\zip_working" /> <!-- first copy the source files specified in the CorySourceFiles ItemGroup above. --> <Copy SourceFiles="@(CopySourceFiles)" DestinationFiles="@(CopySourceFiles->'$(OutDir)\..\zip_working\%(RecursiveDir)%(Filename)%(Extension)')" /> <!-- Perform the zip by calling the UsingTask. Make sure the DestinationFiles above and the SourceDirectory below are pointing to the same place --> <Zip SourceDirectory="$(OutDir)\..\zip_working" OutputFilename="$(OutDir)\..\zip\$(ProjectName).zip" /> <!-- Clean up. --> <RemoveDir Directories="$(OutDir)\..\zip_working" /> </Target> 目标在构建输出文件存在之前运行。听起来不错吗?我完全从Visual Studio中触发构建。

无论如何,我怎样才能确保只有在创建后才能在构建输出文件上运行任务?

适用于Visual Studio 2013 Update 5 / MSBuild 12.0

1 个答案:

答案 0 :(得分:3)

如果删除OutDir中的所有内容然后构建项目,则在构建开始之前评估顶级(如在目标内,而不是在目标内)ItemGroup。例如,可以找到一些信息here。换句话说,在构建之前,OutDir $(OutDir)\**\*.*为空,评估为空,而CopySourceFiles项为空。

解决方案只是将ItemGroup移动到AfterBuild目标中。然后在构建之后对其进行评估,从而获得对outDir中当前文件的正确视图。