如何停止Visual Studio“一直”检出解决方案文件?

156

似乎没有任何原因,每次我打开我的解决方案时,Visual Studio 都会检查 sln 文件。

如果我将其与之前的版本进行比较,就不会发现任何更改。但是这真的很令人沮丧,因为每个人都已经将解决方案检出了。

我正在使用 VS 2008 和 TFS 2008,都是 SP2 版本。

有没有办法阻止这种情况发生?或者这是 TFS 源代码控制提供程序为 VS 的一个功能/错误?


1
TFS支持并发检出,只要.sln文件没有修改,多个检出就不是问题。 - Dirk Vollmar
5
当 *.sln 文件实际上有更改时,它们非常难以合并,因为其中的项目会被赋予任意但不唯一的 ID。我非常支持并发检出,但我会将大部分 *.sln 文件锁定。 - Richard Berg
3
这个问题已经在VS2013中解决了!我在2012中打开相同的解决方案并进行检查,而在2013中打开后一切都很清晰。 - felickz
2
我曾经在所有版本中都看到过这种情况,从Visual Studio 2010到最新版本的Visual Studio 2015 Update 3。每当我打开一个解决方案时,大约有一半的时间会出现这种情况,对于包含许多项目的解决方案来说,这种情况似乎更为频繁。 - Tore Østergaard
如果我将其与先前版本进行比较,就没有任何更改。你很幸运。在我的2010解决方案中,当我使用“获取最新版本”时,它喜欢随机从“解决方案项”文件夹中删除一些SQL文件。 - Medinoc
显示剩余9条评论
9个回答

122

当以下内容在.sln文件中时,就会发生这种情况:

GlobalSection(ExtensibilityGlobals) = postSolution
    MyGlobalProperty = AnyValue
EndGlobalSection

我发现Enterprise Library添加了其中一个。我将其删除,检查了解决方案,关闭然后重新打开它,不再自动检出。


21
看起来Unity NuGet包可能会对我在VS 2010中的解决方案文件造成影响。我删除了这一部分,我的自动检出问题得到了解决。感谢Graham! - Dan Mork
14
我最喜欢的两项技术 - TFS 和 EntLib - 简直是一对心爱的组合。 - user156888
1
我有这样一个部分,但不想删除它,因为它包含我想要保留的数据 - 现在怎么办?微软将此问题关闭为“无法重现” - 这很愚蠢吗? https://connect.microsoft.com/VisualStudio/feedback/details/573538/visual-studio-2010-with-tfs-2010-always-checks-out-the-solution-file-when-opening# - mattanja
丹的评论添加了所需的信息--不需要删除所有全局部分--只需删除似乎由Unity NuGet包添加的部分。 - Jordan0Day
这个方法可行。我在 GlobalSection 中添加了一个 NuGet 引用,就像这个答案中描述的那样。每次打开解决方案文件时,都不会有任何更改。删除此部分后,解决方案文件将不再自动检出。 - JPRO
这个部分不在我的.sln文件中,并且解决方案中也没有安装Nuget包。但是VS仍然一直检查.sln文件!有任何想法吗?(运行VS 2015和TFS 2015) - CaptainStealthy

6

从记忆中来看,如果您使用 工具菜单 -> 选项 并选择源代码控制 -> 环境 面板,那里应该有一些选项可以配置IDE与版本控制的交互方式。

我认为其中一些选项可以控制打开时签出(checkout on open)的行为。


1
是的,它们允许您自动结帐、从结帐提示或什么都不做...但没有任何有助于解决这个问题的功能。 - CodeClimber
你不能在提示时说“不,不要检出”吗? - Scott Marlowe
我希望我是团队中唯一的开发人员......不幸的是,我不能依赖所有开发人员都勤奋。 - CodeClimber
CodeClimber,每次启动VS都会自动检出,你希望停止这个操作,但关闭自动检出选项并不能解决问题。这是怎么回事? - veight
1
对于那些选项列表中没有“环境”的人,请将您的连接从“本地”更改为“服务器”(来源:https://dev59.com/IIXca4cB1Zd3GeqPCgvY) - VenerableAgents

6

如果像我一样,您无法使其正常工作,并且发现一个或多个项目也被检出,则可以采用更简单的解决方案。请记录它一直检查出来的项目。然后转到“文件”-“源代码控制”-“更改源代码控制”,然后取消绑定相关的项目。点击“确定”,保存所有更改,然后再次进入“更改源代码控制”并将项目重新绑定到解决方案。希望这对其他人有用。


3

允许检出并比较两个文件。如果VS添加了一些内容,

<Service Include="{B4F97281-0DBD-4835-9ED8-7DFB966E87FF}" />

你遇到了一个在VS2008中有解决方案,但未移植到VS2005的问题。
请查看此链接获取更多详细信息:

该解决方案中没有任何项目包含此行XML。 - CodeClimber

3
尽管无法预防问题出现,但是大量使用Team Foundation Power Tools中的“撤消未更改”命令将会(并不意外地)在未作出修改时撤消待处理的编辑。

团队基础设施 Power Tools 的更新链接:https://marketplace.visualstudio.com/items?itemName=TFSPowerToolsTeam.MicrosoftVisualStudioTeamFoundationServer2015Power - Jaider

2

谢谢链接,Nigel。整个团队都遇到了这个问题。 - Baldy

1

这是加载在解决方案中的某个项目系统的特性/漏洞。尝试删除各种类型的项目(C#,VB,C ++,网站,Web应用程序,单元测试,Silverlight ...),直到它消失为止;那就是你的答案。


0

你在比较之前是否保存了文件?我曾经遇到过这种情况,一直说文件之间没有变化,但是后来我意识到我没有保存文件,它是在与磁盘中的版本进行比较,而不是内存中的版本。

每次在 Visual Studio 中打开某个解决方案时,它都会执行一些操作,这可能会导致您的 .sln 或项目文件发生更改,然后它会要求您检出该文件。当开发人员机器上的文件夹结构发生更改或者他们没有所有文件的相同版本时,就会发生这种情况。也许有人在某个文件夹中添加了一个项目,而另一个开发人员在另一个地方有相同的项目。 我看到这种情况发生的另一个案例是,当我们有一个带有一些 C++ 项目的解决方案时,由于某种原因,其中一个 C++ 项目具有带有绝对路径的 .res 文件。一旦这个文件被 VS 自动生成,它就会从一个开发人员机器到另一个开发人员机器不断更改。

我建议您打开您的 .sln 文件,并查找一些绝对路径或相对路径,这些路径可能不存在于某些开发人员的机器上,具体取决于他们从您的源代码控制中获取了哪些文件。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接