为少数项目或解决方案运行msbuild post-build任务,并在每次构建时运行一次

时间:2015-08-13 00:52:12

标签: visual-studio-2013 msbuild build-automation

我在Visual Studio中有多个项目的解决方案。我希望在构建任何项目时执行一些后期构建任务(它将文件复制到某个文件夹),并且执行一次

因此,如果我构建一个依赖于其他3个项目的项目,那么我的构建后任务将被执行4次。如何在项目构建时使其仅执行一次? 解决方案范围的构建后目标的选项不起作用,因为只有在构建完整解决方案时才会触发它。

2 个答案:

答案 0 :(得分:0)

为了达到这个目的,我会将一个常见的.targets文件导入到每个项目文件中。

<Import Project="..\AfterBuild.targets" />

上面假设您将其放在一个文件夹中。确保在所有其他导入(尤其是核心导入,例如Microsoft.CSharp.targets)之后插入它

创建AfterBuild.targets文件,例如:

    <Target Name="AfterBuild">

        <ItemGroup>
            <!-- Items to copy -->
            <CopyItems Include="c:\xyz\*" />
        </ItemGroup>
            <!-- Set the source to the item group and the destination folder  and the SkipUnchangedFiles property -->
        <Copy SourceFiles="@(CopyItems)" DestinationFolder="c:\xyz\destination-folder" OverwriteReadOnlyFiles="true" SkipUnchangedFiles="true"/>

    </Target>

</Project>

请注意MsBuild Copy任务的SkipUnchangedFiles属性。如果您构建任何项目,它将仅在源文件从目标文件更改时进行复制。如果您构建所有项目文件,那么源文件将只复制一次。

答案 1 :(得分:0)

我最终创建了单独的空项目,引用了项目的子集并添加了post-build tast:

<Target Name="DeployJsPerfFiles" AfterTargets="Build">
    <Exec WorkingDirectory="$(WorkgroupDir)" Command="rake suite:deploy" />
 </Target>

(我无法使用复制任务,因为我们正在使用Rake任务进行部署)