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

Run msbuild post-build task for few projects or solution, and run it once per build

我在 Visual studio 中有多个项目的解决方案。我想在构建任何项目时执行一些 post-build 任务(它将文件复制到某个文件夹)并且 执行一次 .

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

为了实现这一点,我会在每个项目文件中导入一个通用的 .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 属性。如果您构建任何项目,它只会在源文件与目标文件发生变化时才会复制。如果您构建所有项目文件,那么源文件将只被复制一次。

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

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

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