是否应该将Visual Studio .suo和.user文件添加到源代码管理中?


841

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

我也一直在想是否应该将这些文件添加到源代码管理(在我的情况下为Subversion)。如果我不添加这些文件,而另一位开发人员签出了解决方案,Visual Studio会自动创建新的用户文件吗?


9
.suo文件将自动重新创建。如果出现问题,一种将设置“刷新”为默认值的好方法。
CodingBarfield 2010年

3
有关此确切主题,Subversion和Visual Studio项目的最佳实践是一个更通用的问题。公认答案还包含指向MSDN官方文档的链接,该文档详细描述了应将VS解决方案/项目的哪些文件/目录添加到源控制系统,以及应忽略哪些部分。
Attila Csipak 2014年


Answers:


673

这些文件包含通常针对您的计算机的用户首选项配置,因此最好不要将其放在SCM中。另外,VS几乎每次执行时都会对其进行更改,因此SCM始终会将其标记为“已更改”。我也不参与其中,我在使用VS的项目中工作了2年,这样做没有任何问题。唯一的烦恼是调试参数(执行路径,部署目标等)存储在其中一个文件中(不知道是哪个文件),因此,如果您有针对它们的标准,则将无法通过SCM将其“发布”给其他开发人员,以使其“随时可以使用”整个开发环境。


22
请注意,suo文件会存储信息是否在解决方案中加载/卸载项目。
库格尔,

5
我相信它将调试信息存储在.user文件中(至少对于SQL Server数据工具而言)。另外,当您在“调试”选项卡中更改设置时,它并不会始终持久保存给.user(关闭解决方案似乎行得通,有点烦人……或更改.sqlproj文件中存储的其他设置)。
jamiebarrow

87
您可以在任何文本编辑器中打开.user和.csproj文件。我刚刚测试了将相关调试设置从.user复制粘贴到.csproj,然后删除.user文件。调试继续进行,很高兴从.csproj文件中的新位置读取正确的设置。这应该提供一种提交调试设置而不提交.user文件的方法。确保将它们设置为正确的配置(调试,发行版等)。适用于我的机器!=)
克里斯·尼尔森

139

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


19
如果您自己在多台不同的机器上工作,是否值得添加它们?
thepocketwade

33
我不会,因为它可能会遇到意料之外的系统差异。例如,如果您在工作中使用x64,在家中使用x86,则可能会阻塞“ c:\ program files(x86)”和“ c:\ program files”。我不知道,但是我不会冒险。
史蒂夫·库珀

2
尽管它们包含用户特定的信息,但是我认为通过(包括在项目中)选项新添加的文件的信息也位于.csproj文件中,这要求其他用户手动添加所有新添加的项目资源。如果有人知道解决方法,请在此处提及。
齐柏林飞艇

69

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

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

  1. 因此,其他开发人员将无法完成一个开发人员的设置。
  2. 因此,当您查看状态或提交文件时,这些文件不会使代码库混乱,也不会混淆您需要添加的新文件。

svn:ignore属性在哪里设置以及如何设置?
彼得·莫滕森

@PeterMortensen,看到了这个问题:stackoverflow.com/questions/86049/...
JXG

但是在某种情况下(请参见此答案)添加.user,那么一个人可能会选择不只是忽略.suo-或者一个人可能会忽略.user,从而需要有意识地决定添加它们?不要这样认为,重点svn:ignore是标记不需要有意识的决定的事物。
PJTraill 2015年

49

我们不提交二进制文件(* .suo),但是我们提交.user文件。.user文件包含例如调试项目的启动选项。您可以在“调试”选项卡的项目属性中找到启动选项。我们在某些项目中使用了NUnit,并将nunit-gui.exe配置为项目的开始选项。如果没有.user文件,则每个团队成员都必须分别对其进行配置。

希望这可以帮助。


4
我也开始认为应该是这种情况-提交用户文件,以便团队中的开发人员使用相同的调试设置。如果他们在自己的计算机上进行更改,则仍然可以,只要标准方法是源代码控制中的版本即可。
jamiebarrow

1
其他人建议不要这样做,但是我不确定可能会有什么危险。也许是因为设置不那么精确的repo文件会破坏用户(更好)的本地副本?(我们的团队正在使用BTW的Mercurial。)
Jon Coombs 2013年

2
Microsoft 建议不要将.user文件添加到源代码管理中。
DavidRR

1
您可以将调试设置移至.csproj,请参见此注释
Timbo,

26

自从我在2011年通过Google找到此问题/答案以来,我想我应该花点时间,然后将Visual Studio 2010创建的* .SDF文件的链接添加到可能不应该添加到版本控制中的文件列表中( IDE将重新创建它们)。由于我不确定* .sdf文件在其他地方是否可以合法使用,因此我只忽略了SVN中的特定[projectname] .sdf文件。

为什么Visual Studio转换向导2010创建了一个庞大的SDF数据库文件?



23

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

SUO(解决方案用户选项):记录您可能与解决方案相关联的所有选项,以便每次打开它时,它都包含您进行的自定义。

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


20

这似乎是微软对此的看法:

添加(和编辑).suo文件到源代码管理

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

甚至不要考虑将suo文件添加到源代码管理中!SUO(解决方案用户选项)文件旨在包含用户特定的设置,并且不应在使用同一解决方案的用户之间共享。如果您要在scc数据库中添加suo文件,我不知道您会在IDE中遇到什么其他问题,但是从源代码控制的角度来看,您将破坏Web项目scc集成,使用了Lan vs Internet插件由不同的用户访问VSS,甚至可能导致scc完全中断(存储在suo文件中的VSS数据库路径可能对您有效)可能对其他用户无效。

阿林·康斯坦丁(MSFT)


另外,从MSDN:解决方案用户选项(.Suo)文件。第一句话使Microsoft的意图很明确:“解决方案用户选项(.suo)文件包含每个用户的解决方案选项。不应将此文件签入源代码控制。”
DavidRR 2015年

19

默认情况下,Microsoft的Visual SourceSafe不将这些文件包含在源代码管理中,因为它们是用户特定的设置文件。如果您使用SVN作为源代码管理,我将遵循该模型。


12

Visual Studio将自动创建它们。我不建议将它们放在源代码管理中。很多时候,本地开发人员的SOU文件导致VS在该开发人员框中的行为异常。删除文件然后让VS重新创建它总是可以解决问题。


我剩下.sou文件,重新加载软件包时出现问题。删除.sou文件可解决此问题。谢谢。
奔驰

11

MSDN网站上,它明确指出:

解决方案用户选项(.suo)文件包含每个用户的解决方案选项。此文件不应签入源代码控制

因此,我说在将内容检入源代码管理时忽略这些文件是非常安全的。


9

我不会 每个“用户”可能更改的任何内容通常在源代码管理中都是不好的。.suo,.user,obj / bin目录


8

这些文件是用户特定的选项,应独立于解决方案本身。Visual Studio将根据需要创建新代码,因此无需将其检入源代码管理。确实,最好不要这样做,因为这样可以使各个开发人员根据自己的喜好自定义其环境。


7

您无法对.user文件进行源代码控制,因为这是用户特定的。它包含远程机器的名称以及其他与用户有关的事物。这是一个与vcproj相关的文件。

.suo文件是与sln相关的文件,并且包含“解决方案用户选项”(启动项目,Windows位置(停靠的对象和位置,浮动的对象等)等)。

这是一个二进制文件,我不知道它是否包含与“用户相关”的内容。

在我们公司中,我们不将这些文件置于源代码控制之下。


7

它们包含通常分配给单个开发人员的有关项目的特定设置(例如,调试应用程序时要启动的起始项目和起始页面)。

因此最好不要将它们添加到版本控制中,而让VS重新创建它们,以便每个开发人员都可以拥有他们想要的特定设置。


5

.user是用户设置,我认为.suo是解决方案的用户选项。您不希望这些文件受源代码控制;将为每个用户重新创建它们。



4

使用Rational ClearCase,答案是否定的。只有.sln和。* proj应该在源代码控制中注册。

我无法回答其他供应商。如果我没记错的话,这些文件是“用户”特定的选项,即您的环境。


only the .sln & .*proj should be registered-您忘了这里很多文件吗?

@Wolf除了明显的
Polluks

3

不要将任何这些文件添加到版本控制中。如果签入了版本控制,这将在其他工作站中引起问题,这些文件将使用工作站特定的信息自动生成。



1

如果在ProjectProperties> Debugging> Environment中设置可执行文件的dir依赖关系,则路径存储在'.user'文件中。

假设我在上述字段中设置了此字符串:“ PATH = C:\ xyz \ bin” 这是将其存储在'.user'文件中的方式:

<LocalDebuggerEnvironment>PATH=C:\xyz\bin$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment>

这在OpenCV中为我们提供了很多帮助。我们可以为不同的项目使用不同版本的OpenCV。另一个优点是,在新机器上设置我们的项目非常容易。我们只需要复制相应的依赖目录。因此,对于某些项目,我更喜欢将'.user'添加到源代码管理中。

即使,它完全取决于项目。您可以根据需要拨打电话。


为此目的,符号链接也非常有效。
sɐunıɔןɐqɐp

1

在其他的答案解释的那样,这两个.suo.user不应该被添加到源控制,因为它们是用户/机器专用(顺便说一句.suo用于VS的最新版本被移动到专用临时目录.vs,这应源控制的完全保持了)。

但是,如果您的应用程序需要某种环境设置来在VS中进行调试(此类设置通常保存在.user文件中),则准备样本文件(将其命名为.user.SAMPLE)并将其添加到源代码管理中以供参考可能会很方便。

代替使用此类文件中的硬编码绝对路径,使用相对的或依赖于环境变量是有意义的,因此该示例可能足够通用,可以被其他人轻松重用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.