运行 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 任务进行部署)
我在 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 任务进行部署)