如何在.csproj文件中延迟解析通配符*?
问题分析与说明
原项目配置
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <LangVersion>12.0</LangVersion> <DebugType>portable</DebugType> </PropertyGroup> <ItemGroup> <None Remove="*.dat" /> <None Include="*.dat" CopyToOutputDirectory="Always" /> </ItemGroup> <Target Name="PrecompileScript" BeforeTargets="BeforeCompile"> <Exec Command="dotnet run -c $(Configuration) --no-build --project ../DatGenerator/DatGenerator.csproj -directory $(ProjectDir)" /> </Target> </Project>
核心问题
*.dat通配符在MSBuild执行流程中展开过早,此时PrecompileScript目标通过Exec生成的.dat文件尚未创建,导致这些新生成的文件无法被捕获并复制到输出目录。
限制条件
- 无法直接指定固定输出目录路径,因为项目未设置
<OutputType>exe</OutputType>,必须依赖MSBuild内置的输出复制逻辑。 - 手动逐个列出.dat文件不可行,需要自动适配文件的新增或变更。
当前状态
此前社区认可的解决方案已失效,该问题已提交至MSBuild官方问题追踪平台。
内容的提问来源于stack exchange,提问作者Joshua
相关产品推荐
相关产品推荐

