Visual Studio解决方案包含两种类型的隐藏用户文件。一个是解决方案。suo文件,这是一个二进制文件。另一个是project .user文件,它是一个文本文件。这些文件到底包含哪些数据?
我也一直在考虑是否应该将这些文件添加到源代码控制(在我的情况下是Subversion)。如果我没有添加这些文件,而另一个开发人员签出了解决方案,Visual Studio会自动创建新的用户文件吗?
Visual Studio解决方案包含两种类型的隐藏用户文件。一个是解决方案。suo文件,这是一个二进制文件。另一个是project .user文件,它是一个文本文件。这些文件到底包含哪些数据?
我也一直在考虑是否应该将这些文件添加到源代码控制(在我的情况下是Subversion)。如果我没有添加这些文件,而另一个开发人员签出了解决方案,Visual Studio会自动创建新的用户文件吗?
当前回答
您不能对.user文件进行源代码控制,因为这是特定于用户的。它包含远程机器的名称和其他与用户相关的内容。这是一个vcproj相关的文件。
suo文件是一个sln相关的文件,它包含“解决方案用户选项”(启动项目,窗口位置(停靠的内容和位置,浮动的内容),等等。
这是一个二进制文件,我不知道它是否包含“用户相关”的内容。
在我们公司,我们不把这些文件置于源代码控制之下。
其他回答
其他人解释说,不,你不希望在版本控制中使用这个。你应该配置你的版本控制系统来忽略这个文件(例如通过一个.gitignore文件)。
要真正理解其中的原因,看看这个文件中到底有什么会有所帮助。我编写了一个命令行工具,可以让您查看.suo文件的内容。
在你的机器上安装它通过:
dotnet tool install -g suo
它有两个子命令,键和视图。
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
我不会。.suo, .user, obj/bin目录中任何可能改变每个“用户”的内容通常都不适合源代码控制
These files contain user preference configurations that are in general specific to your machine, so it's better not to put it in SCM. Also, VS will change it almost every time you execute it, so it will always be marked by the SCM as 'changed'. I don't include either, I'm in a project using VS for 2 years and had no problems doing that. The only minor annoyance is that the debug parameters (execution path, deployment target, etc.) are stored in one of those files (don't know which), so if you have a standard for them you won't be able to 'publish' it via SCM for other developers to have the entire development environment 'ready to use'.
如果你在ProjectProperties>Debugging>Environment中设置了可执行目录依赖项,路径将存储在'。用户的文件。
假设我在上面提到的字段中设置这个字符串:"PATH=C:\xyz\bin" 这就是它被存储在'中的方式。用户的文件:
< LocalDebuggerEnvironment >路径= C: \ xyz \ bin美元(LocalDebuggerEnvironment) < / LocalDebuggerEnvironment >
这对我们在OpenCV中工作有很大帮助。我们可以为不同的项目使用不同版本的OpenCV。另一个优点是,在新机器上建立我们的项目非常容易。我们只需要复制相应的依赖dirs。所以对于一些项目,我更喜欢添加'。用户'到源代码控制。
尽管如此,它完全依赖于项目。你可以根据自己的需要接听电话。
不,它们不应该用于源代码控制,因为它们是开发人员/机器特定的本地设置。
GitHub在https://github.com/github/gitignore/blob/master/VisualStudio.gitignore上为VisualStudio用户提供了一个建议的文件类型列表
对于svn,我有以下global-ignore属性集:
* .DotSettings.User * .onetoc2 *。suo .vs预编译的web thumbs.db obj bin调试 *。user * * .vshost。 * .tss * .dbml.layout