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

Ben*_*lls 819 version-control visual-studio

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

我也一直想知道是否应该将这些文件添加到源代码控制中(在我的情况下是Subversion).如果我不添加这些文件而另一个开发人员检出解决方案,Visual Studio会自动创建新的用户文件吗?

Fab*_*llo 658

这些文件包含通常特定于您的计算机的用户首选项配置,因此最好不要将其放在SCM中.此外,VS几乎每次执行时都会更改它,因此SCM始终将其标记为"已更改".我也不包括,我在使用VS 2年的项目中并没有遇到任何问题.唯一的小麻烦是调试参数(执行路径,部署目标等)存储在其中一个文件中(不知道哪个),所以如果你有一个标准,你将无法'通过SCM发布'它,让其他开发人员可以使整个开发环境"随时可用".

  • 您可以在任何文本编辑器中打开.user和.csproj文件.我刚刚测试了将.user中的相关调试设置复制粘贴到.csproj中,然后删除了.user文件.调试继续工作,愉快地从.csproj文件中的新位置读取正确的设置.这应该提供一种在不提交.user文件的情况下提交调试设置的方法.确保将它们放在正确的配置中(调试,发布等).适用于我的机器!=) (85认同)
  • 小心,suo文件存储信息是否在解决方案中加载/卸载项目. (21认同)
  • 我相信它将调试信息存储在.user文件中(至少对于SQL Server数据工具).此外,当您更改"调试"选项卡中的设置时,它并不总是持久保存到.user(关闭解决方案似乎有效,有点烦人......或更改存储在.sqlproj文件中的其他设置). (5认同)

Ste*_*per 138

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

  • 我不会,因为它可能对意外的系统差异很脆弱; 例如,如果你在工作的x64和家里的x86上工作,那么它可能会扼杀"c:\ program files(x86)"和"c:\ program files".我不知道,但我不会冒险. (33认同)
  • 如果您自己在几台不同的机器上工作,那么添加它们是否值得? (19认同)
  • 虽然它们包含用户特定的信息,但是我认为通过(包括在项目中)选项中新添加的文件的信息也在.csproj文件中,这需要其他用户手动添加所有新添加的项目资源.如果有人知道解决方法,请在此处提及. (2认同)

JXG*_*JXG 69

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

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

  1. 因此,其他开发人员不会使用一个开发人员的设置.
  2. 因此,当您查看状态或提交文件时,这些文件不会混淆代码库并模糊您需要添加的新文件.


Tho*_*mas 49

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

希望这可以帮助.

  • 我也开始认为应该是这种情况 - 提交用户文件,以便团队中的开发人员使用相同的调试设置.如果他们在自己的机器上更改它,仍然没问题,只要标准方式是源代码控制中的版本. (4认同)
  • Microsoft [建议不要](http://stackoverflow.com/a/1732938/1497596)将.user文件添加到源代码管理中. (2认同)

Ste*_*hen 26

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

为什么Visual Studio转换向导2010会创建大量SDF数据库文件?

  • SDF文件可能是[SQL Server Compact Edition数据库](http://en.wikipedia.org/wiki/SQL_Server_Compact#File_Format). (2认同)

JRo*_*ert 23

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

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

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


cor*_*ori 19

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


Sco*_*t W 19

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

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

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

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

艾琳·康斯坦丁(MSFT)

  • 此外,来自 MSDN:[解决方案用户选项 (.Suo) 文件](https://msdn.microsoft.com/en-us/library/bb165909.aspx)。第一句让微软的意图非常明确:*“解决方案用户选项 (.suo) 文件包含每个用户的解决方案选项。不应将该文件签入源代码控制。”* (2认同)

Blo*_*und 12

Visual Studio将自动创建它们.我不建议将它们放在源代码管理中.很多时候,本地开发人员的SOU文件导致VS在开发人员框中表现不正常.删除文件然后让VS重新创建它总是修复问题.


Far*_*rax 11

MSDN网站上,它明确指出

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

所以我会说在检查源代码控制的东西时忽略这些文件是相当安全的.


Sca*_*ove 9

我不会.任何可能因"用户"而改变的东西在源代码控制中通常都不好..suo,.user,obj/bin目录


小智 9

不。

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


ben*_*ual 8

这些文件是特定于用户的选项,应独立于解决方案本身.Visual Studio将根据需要创建新的,因此不需要签入源代码控制.事实上,最好不要这样做,因为这允许个别开发人员根据自己的需要定制他们的环境.


mas*_*ini 7

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

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


uga*_*oft 7

您无法对.user文件进行源代码控制,因为这是用户特定的.它包含远程计算机的名称和其他依赖于用户的内容.这是一个vcproj相关文件.

.suo文件是一个sln相关文件,它包含"解决方案用户选项"(启动项目,窗口位置(停靠的位置和位置,浮动的内容)等)

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

在我们公司,我们不会将这些文件置于源代码管理之下.


Nic*_*ick 5

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


Dre*_*kes 5

其他人解释说不,你不希望在版本控制中使用它。您应该配置版本控制系统以忽略该文件(例如通过文件.gitignore)。

要真正理解原因,了解该文件中的实际内容会有所帮助。我编写了一个命令行工具,可以让您查看.suo文件的内容。

通过以下方式将其安装在您的计算机上:

dotnet tool install -g suo
Run Code Online (Sandbox Code Playgroud)

它有两个子命令,keysview

suo keys <path-to-suo-file>
Run Code Online (Sandbox Code Playgroud)

这将转储文件中每个值的键。例如(删节):

nuget
ProjInfoEx
BookmarkState
DebuggerWatches
HiddenSlnFolders
ObjMgrContentsV8
UnloadedProjects
ClassViewContents
OutliningStateDir
ProjExplorerState
TaskListShortcuts
XmlPackageOptions
BackgroundLoadData
DebuggerExceptions
DebuggerFindSource
DebuggerFindSymbol
ILSpy-234190A6EE66
MRU Solution Files
UnloadedProjectsEx
ApplicationInsights
DebuggerBreakpoints
OutliningStateV1674
...
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,许多 IDE 功能都使用此文件来存储其状态。

使用该view命令查看给定键的值。例如:

$ suo view nuget --format=utf8 .suo
nuget

?{"WindowSettings":{"project:MyProject":{"SourceRepository":"nuget.org","ShowPreviewWindow":false,"ShowDeprecatedFrameworkWindow":true,"RemoveDependencies":false,"ForceRemove":false,"IncludePrerelease":false,"SelectedFilter":"UpdatesAvailable","DependencyBehavior":"Lowest","FileConflictAction":"PromptUser","OptionsExpanded":false,"SortPropertyName":"ProjectName","SortDirection":"Ascending"}}}
Run Code Online (Sandbox Code Playgroud)

有关该工具的更多信息,请访问:https ://github.com/drewnoakes/suo