如何在文件变更时运行自定义MSBuild目标?
问题描述
我希望实现以下MSBuild行为:
- 构建干净项目时,触发自定义目标
OnFilesChange; - 无任何变更时重新构建,跳过整个构建流程且不触发该目标;
- 仅修改
./Plugins文件夹中的跟踪文件时,仅触发OnFilesChange目标而非整个构建。
请问是否可行?我有一个空C#项目,其.csproj文件配置如下:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> </PropertyGroup> <ItemGroup> <SourceFilesFiles Include="Plugins\test.txt" /> <DestinationFiles Include="$(OutputPath)\Plugins\test.txt" /> </ItemGroup> <Target Name="OnFilesChange" Inputs="@(SourceFilesFiles)" Outputs="@(DestinationFiles)"> <Copy SourceFiles="@(SourceFilesFiles)" DestinationFiles="@(DestinationFiles)" /> </Target> </Project>
我尝试创建该目标,使其在构建时对比./Plugins/test.txt与输出目录中的对应文件,变更时触发目标,期望遵循增量构建流程但未成功。
可行的临时解决方案
目前未找到完美解决方案,但有一个可行的临时办法:在.csproj中添加以下配置:
<ItemGroup> <AdditionalFiles Include="path\to\you\files\**\*.*" Exclude="**\dist\**\*.*;**\node_modules\**\*.*;etc\files\to\exclude.txt" /> </ItemGroup>
该方案可跟踪额外文件并触发常规构建(而非跳过最新检查)。注意:AdditionalFiles通常用于代码分析器。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

