MSBuild中通配符*无法识别新增文件的问题求助
问题原因
你在.props文件顶层定义的FixJsFiles文件组,是在MSBuild评估阶段就完成解析的——这个阶段发生在所有目标执行之前,通配符wwwroot/js/*.js会扫描当时磁盘上的文件并生成固定列表。一旦评估阶段结束,后续新增的文件不会自动加入该列表,哪怕你重建解决方案(只有重建时重新加载项目才会重新评估,但重建后新增的文件依然不会被后续发布的评估阶段捕获)。
解决方案
将文件组的定义移到MinifyJs目标内部,让它在执行阶段动态生成,这样每次目标运行时都会重新扫描磁盘,获取最新的文件列表:
<Target Name="MinifyJs" AfterTargets="AfterPublish" Outputs="%(FixJsFiles.Identity)"> <!-- 动态创建文件组,每次执行目标时重新扫描 --> <ItemGroup> <FixJsFiles Include="wwwroot/js/*.js" /> </ItemGroup> <!-- 这里执行你的变量配置和压缩命令 --> <!-- 示例:<Exec Command="minifier.exe -i %(FixJsFiles.Identity) -o $(PublishDir)/wwwroot/js/%(FixJsFiles.Filename).min.js" /> --> </Target>
如果你的压缩操作是针对发布到目标文件夹后的文件,只需把通配符路径改成发布目录:
<ItemGroup> <FixJsFiles Include="$(PublishDir)/wwwroot/js/*.js" /> </ItemGroup>
这样修改后,每次发布触发MinifyJs时,所有新增的JS文件都会被扫描到并处理。
内容的提问来源于stack exchange,提问作者UglySwede
相关产品推荐
相关产品推荐

