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

时间:2008-09-16 13:40:42

标签: visual-studio version-control

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

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

22 个答案:

答案 0 :(得分:647)

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

答案 1 :(得分:135)

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

答案 2 :(得分:67)

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

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

  1. 所以其他开发者不会结束 一个开发人员的设置。
  2. 因此,当您查看状态或提交时 这些文件不会使代码库混乱,也不会掩盖你需要添加的新文件。

答案 3 :(得分:48)

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

希望这有帮助。

答案 4 :(得分:25)

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

Why does the Visual Studio conversion wizard 2010 create a massive SDF database file?

答案 5 :(得分:22)

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

  

SUO(解决方案用户选项):记录   您可能拥有的所有选项   与您的解决方案相关联   每次打开它,它包括   你的自定义   取得了。

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

答案 6 :(得分:18)

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

答案 7 :(得分:17)

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

Adding (and editing) .suo files to source control

  

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

     

甚至不考虑将suo文件添加到源代码管理中! SUO   (soluton用户选项)文件旨在包含特定于用户的   设置,不应在使用相同设备的用户之间共享   解。如果你要在scc数据库中添加suo文件,我不会   知道IDE中你还有什么其他的东西,但是来自源代码控制   从角度来看你将破解web项目的scc整合,兰vs   不同用户用于VSS访问的Internet插件,您可以   甚至导致scc完全中断(VSS数据库路径存储在   可能对您有效的suo文件可能对其他用户无效。)

     

Alin Constantin(MSFT)

答案 8 :(得分:11)

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

答案 9 :(得分:10)

MSDN website上,它明确指出

  

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

所以我说在检查源控件的内容时忽略这些文件是相当安全的。

答案 10 :(得分:8)

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

答案 11 :(得分:7)

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

答案 12 :(得分:6)

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

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

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

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

答案 13 :(得分:6)

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

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

答案 14 :(得分:4)

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

答案 15 :(得分:3)

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

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

答案 16 :(得分:3)

否。

  

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

答案 17 :(得分:2)

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

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

通过以下方式将其安装到您的机器上:

dotnet tool install -g suo

它有两个子命令,keysview

suo keys <path-to-suo-file>

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

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
...

如您所见,许多 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"}}}

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

答案 18 :(得分:1)

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

答案 19 :(得分:0)

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

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

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

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

尽管如此,它完全取决于项目。您可以根据需要拨打电话。

答案 20 :(得分:0)

否,因为它们是开发人员/计算机专用的本地设置,所以不应将其提交给源代码管理。

GitHub维护了建议的文件类型列表,供Visual Studio用户在https://github.com/github/gitignore/blob/master/VisualStudio.gitignore忽略

对于svn,我设置了以下global-ignore属性:

  

*。DotSettings.User
  * .onetoc2
  * .suo
.vs
PrecompiledWeb
thumbs.db
obj
bin
调试
  * .user
* .vshost。*
  * .tss
  * .dbml.layout

答案 21 :(得分:0)

如其他答案所述,.suo.user都不应该同时添加到源代码管理中,因为它们是特定于用户/机器的(对于最新版本的VS,{TW} .suo已移到专用临时目录.vs中,该目录应完全不受源代码控制。)

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

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