我在Visual Studio中有多个项目的解决方案。我希望在构建任何项目时执行一些后期构建任务(它将文件复制到某个文件夹),并且执行一次。
因此,如果我构建一个依赖于其他3个项目的项目,那么我的构建后任务将被执行4次。如何在项目构建时使其仅执行一次? 解决方案范围的构建后目标的选项不起作用,因为只有在构建完整解决方案时才会触发它。
答案 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任务进行部署)