Visual Studio 2017 中带有 git 的团队资源管理器声称解决方案文件已更改,但显示没有更改

TeamExplorer with git in VisualStudio 2017 claims solution file has changed, while showing no change

在项目的某个时刻,TeamExplorer 开始不断指示解决方案文件上的更改,但与 VS 中未修改版本的比较没有显示任何更改。

Screenshot: Team Explorer claiming solution file has been changed

到目前为止我尝试了什么:

  1. 为了排除 git 问题,我打开了 git bash 和 运行 git status,但也没有显示任何变化。
  2. Team Explorer 的 git 控制台显示了这一点,当我尝试 stage 幽灵更新时:

    文件未暂存,因为它在内存中修改但未保存到磁盘:C:\Develop\playground\ClassLibrary1\ClassLibrary1.sln

  3. 在 VS 中单击任何保存按钮或菜单功能都无济于事。

  4. 尝试通过 全部提交 操作按钮提交此幽灵更改,VS 显示一般错误 "fatal: unexpected sequence in commit output.".

  5. 重新克隆整个仓库没有帮助。

  6. 对解决方案文件进行其他更改无济于事。

  7. 行尾检查正常(CR/LF)。

Visual Studio版本是15.5.5.

知道是什么原因造成的或如何摆脱它吗?


这是我的解决方案文件:

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2026
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassLibrary1", "ClassLibrary1\ClassLibrary1.csproj", "{3E6F764F-D995-4551-921E-43D70B3129B8}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{E9781EEA-6178-46BD-82B9-AED6B76C8D14}"
    ProjectSection(SolutionItems) = preProject
        version.json = version.json
    EndProjectSection
    ProjectSection(FolderGlobals) = preProject
         __JSONSchema = 
    EndProjectSection
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|Any CPU = Debug|Any CPU
        Release|Any CPU = Release|Any CPU
    EndGlobalSection
    GlobalSection(ProjectConfigurationPlatforms) = postSolution
        {3E6F764F-D995-4551-921E-43D70B3129B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {3E6F764F-D995-4551-921E-43D70B3129B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {3E6F764F-D995-4551-921E-43D70B3129B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {3E6F764F-D995-4551-921E-43D70B3129B8}.Release|Any CPU.Build.0 = Release|Any CPU
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
    EndGlobalSection
    GlobalSection(ExtensibilityGlobals) = postSolution
        SolutionGuid = {7EDCF511-FC54-4E98-9064-11E9A1B43DD1}
    EndGlobalSection
EndGlobal

“更改”页面中文件名旁边的 * 表示该文件在内存中被标记为已修改,任何 in-memory 更改可能尚未写入磁盘。不幸的是,在某些情况下,即使文件没有实际更改,也可能会出现 *。

原因是每当 Visual Studio 中加载的文件即将被修改时,源代码控制提供程序都会收到通知。支持 pre-edit 签出的源代码控制提供程序(例如:TFVC)可以选择在更改之前自动挂起对文件的编辑(如果在服务器工作区中工作)。不使用 pre-edit 签出(例如:Git)的源代码控制提供程序仍可能选择主动将文件列为编辑,以便用户知道有 in-memory 更改。

在任何一种情况下,Visual Studio 中通知源代码管理提供程序的子系统可能实际上并没有跟进并编辑文件。这可能导致文件在内存中显示为已编辑但没有实际更改。保存文件(对于解决方案,文件 -> 全部保存)应该会导致文件的状态被重置,至少在下一个编辑通知出现之前。

希望对您有所帮助。

我可以通过删除行来解决问题

__JSONSchema = 

这一行是在 JSON 文件 version.json 添加到解决方案时引入的。 JSON 文件编辑器中的模式下拉框被 VisualStudio 设置为任意条目。然后我选择了 <No schema selected> 并保存了解决方案。这就是虚线的创建方式。