分支切换时Visual Studio修改.csproj文件的问题排查
Visual Studio 项目文件自动格式化触发
VS 2022/2026 内置了对.csproj这类项目文件的自动格式化逻辑,只要检测到解决方案目录下存在.editorconfig(哪怕仅写了root = true或是空文件),就会触发项目文件的XML格式整理——比如调整节点顺序、统一缩进/换行符、清理冗余空格等。这些格式层面的变更会被Git标记为文件修改,但实际代码逻辑没有变化。切换分支时VS会重新加载项目,自动执行这个格式化操作,导致前一分支的格式规则被带入当前分支的.csproj。Code Cleanup 后台自动执行
虽然你配置了特定的Code Cleanup配置文件(配置文件2),但VS可能在分支切换后后台自动触发了Code Cleanup流程。部分Code Cleanup规则默认包含项目文件的标准化处理,比如统一引用排序、整理XML节点结构。即使.editorconfig内容极简,VS仍会关联Code Cleanup规则,导致.csproj被自动修改。Visual Studio 后台文件同步机制
VS的后台文件处理服务会在项目加载(分支切换必然触发加载)时,自动应用当前目录的配置规则。.editorconfig的存在(无论内容)会让VS认为需要对项目文件应用定制化规则,进而触发文件的重新写入——哪怕只是写入和原内容逻辑一致但格式不同的XML,最终被Git识别为变更。Git 换行符或文件编码冲突
如果团队中Git的换行符配置(core.autocrlf)和Visual Studio的换行符设置不一致,切换分支时VS会自动转换.csproj的换行符格式(比如从LF转为CRLF),这种编码层面的变更Git会标记为文件修改,但文本对比时看不到内容差异。.editorconfig的存在可能让VS更严格地执行自身的换行符规则,加剧这个问题。SourceTree 状态缓存异常
偶尔SourceTree的文件状态缓存会出现延迟,当VS在后台修改了.csproj后,SourceTree没有及时刷新,导致显示文件已修改但实际对比无差异。不过你能稳定复现问题,这个更可能是伴随上述原因的附加现象,而非根本原因。
内容的提问来源于stack exchange,提问作者Alexandr

