.NET Framework项目删除文件后如何阻止csproj自动重置?
.NET Framework项目.csproj删除文件后自动修改的解决问题
问题描述
我为.NET Framework项目添加了以下规则,用于批量包含所有代码文件:
<ItemGroup> <Compile Include="**\*.cs"/> <Compile Remove="bin\**\*;obj\**\*"/> </ItemGroup>
添加文件时项目可正常构建,且不会修改.csproj;但删除项目中的文件后,.csproj会被自动重新生成——改为逐个列出要包含的文件,同时删除<Compile Include="**\*.cs"/>行。
我需要确保删除文件后.csproj保持稳定,避免并行开发分支合并时出现Git冲突。补充说明:我已在新建项目中复现该问题,删除项目内任意类文件并执行构建/重建操作即可触发。
解决方案
1. 禁用Visual Studio的自动文件同步
打开Visual Studio,依次进入「工具」→「选项」→「项目和解决方案」→「常规」,取消勾选以下两个选项:
- 跟踪文件系统变化
- 自动检测文件变化并提示重新加载项目
这会阻止VS自动扫描文件系统变动并修改.csproj。
2. 配置.csproj禁用默认文件包含逻辑
在.csproj文件中添加<EnableDefaultCompileItems>false</EnableDefaultCompileItems>属性,明确禁用MSBuild默认的逐个文件包含行为,强制使用自定义的通配符规则。修改后的完整配置如下:
<PropertyGroup> <EnableDefaultCompileItems>false</EnableDefaultCompileItems> </PropertyGroup> <ItemGroup> <Compile Include="**\*.cs"/> <Compile Remove="bin\**\*;obj\**\*"/> </ItemGroup>
该属性会告诉MSBuild不要自动生成默认的Compile项,完全遵循你定义的通配符规则,无论添加还是删除文件,都不会修改.csproj内容。
3. 手动维护项目文件(可选)
如果上述方法仍无效,可右键项目选择「卸载项目」,直接编辑.csproj文件,确保所有代码文件引用都使用通配符而非逐个列出。编辑完成后重新加载项目,VS将不会自动替换通配符为单个文件引用。
内容的提问来源于stack exchange,提问作者Maor Arnon
相关产品推荐
相关产品推荐

