我应该将Visual Studio的.suo和.user文件添加到源代码控制吗?

905

Visual Studio的解决方案包含两种类型的隐藏用户文件。其中一种是解决方案.suo文件,它是一个二进制文件。另一种是项目.user文件,它是一个文本文件。这些文件具体包含哪些数据?

我一直在想是否应该将这些文件添加到源代码控制中(在我的情况下是Subversion)。如果我不将这些文件添加进去,而另一个开发者检出了解决方案,那么 Visual Studio 是否会自动创建新的用户文件呢?


12
.suo文件会自动重新创建。如果出现问题,将设置还原为默认值的好方法。 - CodingBarfield
5
Subversion和Visual Studio项目的最佳实践是关于这个具体话题的一个更通用的问题。同时,其被接受的答案中包含了指向官方MSDN文档的链接,详细描述了VS解决方案/项目的哪些文件/目录应该添加到源代码控制系统中,以及哪些部分应该被忽略。 - Attila Csipak
3
关于 *.suo 文件,请参见此处:https://msdn.microsoft.com/zh-cn/library/bb165909.aspx。 - smwikipedia
哪些 Visual C++ 文件类型应该提交到版本控制? - phuclv
1
有一种非常简单的方法来确定是否应该将特定文件包含在版本控制中。删除该文件。您的应用程序是否仍然能够按预期构建和执行?如果是,那么该文件不应包括在内。 - JoelFan
22个回答

711

这些文件包含与用户偏好设置相关的配置,通常是特定于您的计算机的,因此最好不要将其放入SCM。另外,每次执行VS时都会更改它,所以它始终会被SCM标记为“已更改”。

我也不包括这些文件,在使用VS进行项目开发两年后,没有任何问题。唯一的小烦恼是调试参数(执行路径、部署目标等)存储在其中一个文件中(不知道是哪一个),因此如果您对它们有一个标准,您无法通过SCM“发布”它,使其他开发人员拥有整个开发环境“准备就绪”。


26
注意,suo文件存储了项目在解决方案中是否被加载/卸载的信息。 - Kugel
5
我认为它会将调试信息存储在.user文件中(至少对于SQL Server Data Tools而言)。另外,在更改调试选项卡中的设置时,并不总是立即保存到.user文件中(关闭解决方案似乎可以,但有点烦人...或者更改存储在.sqlproj文件中的其他设置也可行)。 - jamiebarrow
96
你可以使用任何文本编辑器打开.user和.csproj文件。我刚才测试了将.user文件中相关的调试设置复制到.csproj文件中,然后删除.user文件。调试继续正常工作,并从.csproj文件中正确的位置读取设置。这应该提供了一种在不提交.user文件的情况下提交调试设置的方法。确保将它们放在正确的配置(调试、发布等)中。在我的电脑上可行!=) - Chris Nielsen
@ChrisNielsen,手动插入的属性是否出现在Visual Studio的GUI中?我似乎已经使调试工作正常了,但是由于字段值没有显示在Visual Studio中,它看起来很神秘。 - JamEnergy

150

您不需要添加这些文件--它们包含每个用户的设置,其他开发人员也不需要您的副本。


21
如果你一个人在多台不同的机器上工作,添加它们是否值得? - thepocketwade
34
我不会这样做,因为它可能会对意外的系统差异很脆弱;例如,如果你在工作时使用x64,在家里使用x86,则可能会在“c:\program files (x86)”和“c:\program files”上出错。虽然我不确定,但我不愿冒险。 - Steve Cooper
2
尽管它们包含特定于用户的信息,但我认为通过(包括在项目中)选项新添加的文件的信息也在.csproj文件中,这需要其他用户手动添加所有新添加的项目资源。如果有人知道解决方法,请在此处提及。 - zeppelin

73

其他人已经解释了为什么将*.suo*.user文件放在源代码控制下不是一个好主意。

我建议您将这些模式添加到svn:ignore属性中,原因有两个:

  1. 这样其他开发人员就不会收到另一个开发人员的设置。
  2. 这样,当您查看状态或提交文件时,这些文件不会杂乱无序地混杂在代码库中,也不会遮盖您需要添加的新文件。

svn:ignore 属性在哪里以及如何设置? - Peter Mortensen
@PeterMortensen,请看这个问题:https://dev59.com/qXVD5IYBdhLWcg3wGXpI - JXG
但是有一种情况(参见这个答案),可以添加.user,这样就可以选择不仅忽略.suo - 或者可以忽略.user,这样就需要有意识地决定加入它们?我不这么认为,svn:ignore的目的是标记那些不需要有意识决定的东西。 - PJTraill

51
我们不提交二进制文件(*.suo),但我们提交.user文件。.user文件包含例如调试项目的启动选项。您可以在项目属性中的“调试”选项卡中找到启动选项。我们在一些项目中使用NUnit,并将nunit-gui.exe配置为项目的启动选项。没有.user文件,每个团队成员都必须单独配置它。希望这有所帮助。

4
我开始认为这样做是合理的——提交用户文件,以便团队中的开发人员使用相同的调试设置。如果他们在自己的计算机上更改了它,仍然可以,只要标准方式是源代码控制中的版本。 - jamiebarrow
1
其他人建议不要这样做,但我不确定可能存在的危险是什么。也许是因为具有较少精确设置的repo文件会覆盖用户更好的本地副本?(顺便说一下,我们的团队正在使用Mercurial。) - Jon Coombs
3
微软建议不要将 .user 文件添加到源代码控制中。 - DavidRR
1
你可以将调试设置移动到.csproj文件中,参见此评论 - Tim Sparkles
你可以添加一个命名不同的标准用户设置副本。 - TrippLamb
将用户文件添加到源代码控制中的危险在于,如果一个开发人员更改了他们的本地调试设置,然后意外地将更新后的用户文件与另一个提交一起检入(这是很容易发生的事情),那么当团队成员获取更新后的用户文件时,调试设置会对所有人进行更改。在我看来,最好是将其排除,并为每个开发人员手动配置调试设置(例如参考自述文件或项目网站)。 - phn

26
自从我在2011年通过谷歌找到了这个问题/答案,我想花点时间并添加一个链接到*.SDF文件的列表中。Visual Studio 2010创建的这些文件可能不应该被加入版本控制(IDE会重新创建它们)。由于我不确定*.sdf文件是否可能在其他地方有合法用途,所以我只是从SVN中忽略了特定的[projectname].sdf文件。 为什么Visual Studio转换向导2010会创建一个巨大的SDF数据库文件?

2
SDF文件可能是SQL Server Compact Edition数据库 - Carl G

23
不,你不应该将它们添加到源代码管理中,因为正如你所说,它们是特定于用户的。

SUO(Solution User Options):记录与解决方案相关的所有选项,以便每次打开解决方案时都包括您进行的自定义。

.user文件包含项目的用户选项(而SUO用于解决方案),并扩展了项目文件名(例如,anything.csproj.user包含anything.csproj项目的用户设置)。


22

这似乎是微软在此问题上的看法:

向源代码控制添加(和编辑).suo文件

我不知道为什么你的项目将DebuggingWorkingDirectory存储在suo文件中。如果这是用户特定的设置,您应该考虑将其存储在*.proj.user文件名中。如果该设置可在所有工作于该项目的用户之间共享,则应考虑将其存储在项目文件本身中。

根本不要考虑将suo文件添加到源代码控制中! SUO(解决方案用户选项)文件旨在包含特定于用户的设置,并且不应在同一解决方案上工作的用户之间共享。如果您将suo文件添加到scc数据库中,我不知道IDE中会破坏哪些其他东西,但从源代码控制的角度来看,您将破坏Web项目的SCC集成,不同用户用于VSS访问的局域网与互联网插件,甚至可能导致SCC完全崩溃(suo文件存储的VSS数据库路径对您而言可能是有效的,但对于另一个用户可能无效)。

Alin Constantin(MSFT)


2
此外,来自 MSDN:解决方案用户选项(.Suo)文件。第一句话非常明确地表明了微软的意图:“解决方案用户选项(.suo)文件包含每个用户的解决方案选项。不应将此文件检入源代码控制。” - DavidRR

19

默认情况下,微软的Visual SourceSafe不会将这些文件包含在源代码控制中,因为它们是特定于用户的设置文件。如果您正在使用SVN作为源代码控制,请遵循这个模式。


13

不。

我只想要一个简短的答案,但是没有得到。


12

Visual Studio会自动创建它们。我不建议将它们放在源代码控制中。有许多情况是本地开发人员的SOU文件导致VS在该开发人员的电脑上表现异常。删除文件,然后让VS重新创建它总是可以解决问题。


我有一个.sou文件剩余,重新加载包时出现了问题。删除.sou文件解决了这个问题。谢谢。 - mercedes

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