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

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

Should I add the Visual Studio .suo and .user files to source control?

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

我还想知道是否应该将这些文件添加到源代码管理中(在我的例子中是Subversion)。如果我不添加这些文件,而另一个开发人员签出了解决方案,Visual Studio会自动创建新的用户文件吗?


这些文件包含用户首选项配置,这些配置通常特定于您的计算机,因此最好不要将其放入SCM。而且,VS几乎每次执行时都会更改它,因此它总是由SCM标记为"已更改"。我也不包括,我在一个使用vs的项目中工作了2年,并且在这方面没有任何问题。唯一的小麻烦是调试参数(执行路径、部署目标等)存储在这些文件中的一个(不知道是哪个),因此如果您有一个标准,您将无法通过SCM"发布"它,以便其他开发人员"准备好使用"整个开发环境。


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


其他人也解释了为什么将*.suo*.user文件置于源代码管理下不是一个好主意。

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

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

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

    希望这有帮助。


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

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


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

    SUO (Solution User Options): Records
    all of the options that you might
    associate with your solution so that
    each time you open it, it includes
    customizations that you
    have made.

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


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


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

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

    I don't know why your project stores the DebuggingWorkingDirectory in
    the suo file. If that is a user specific setting you should consider
    storing that in the *.proj.user filename. If that setting is shareable
    between all users working on the project you should consider storing
    it in the project file itself.

    Don't even think of adding the suo file to source control! The SUO
    (soluton user options) file is meant to contain user-specific
    settings, and should not be shared amongst users working on the same
    solution. If you'd be adding the suo file in the scc database I don't
    know what other things in the IDE you'd break, but from source control
    point of view you will break web projects scc integration, the Lan vs
    Internet plugin used by different users for VSS access, and you could
    even cause the scc to break completely (VSS database path stored in
    suo file that may be valid for you may not be valid for another user).

    Alin Constantin (MSFT)


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


    在msdn网站上,它清楚地表明

    The solution user options (.suo) file contains per-user solution
    options. This file should not be checked in to source code control.

    所以我想说,在将文件签入到源代码管理时忽略这些文件是非常安全的。


    我不会的。任何可以根据"用户"改变的东西在源代码管理中通常都是不好的。.suo,.user,obj/bin目录


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


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

    所以最好不要将它们添加到版本控制中,留下vs重新创建它们,这样每个开发人员都可以拥有他们想要的特定设置。


    无法对.user文件进行源代码管理,因为这是用户特定的。它包含远程机器的名称和其他与用户相关的东西。这是一个与vcproj相关的文件。

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

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

    在我们公司,这些文件不受源代码管理。


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


    使用RationalClearCase,答案是否。只有.sln&;*proj应该在源代码管理中注册。

    我不能回答其他供应商的问题。如果我记得正确的话,这些文件是"用户"特定的选项,您的环境。


    不要将这些文件添加到版本控制中。如果将这些文件签入到版本控制中,将使用工作站特定信息自动生成这些文件,这将在其他工作站中造成故障。


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

    但是,如果您的应用程序需要一些环境设置来在VS中进行调试(这些设置通常保存在.user文件中),那么准备一个示例文件(将其命名为.user.SAMPLE文件)并将其添加到源代码管理中以供参考可能很方便。

    这种文件中没有硬编码的绝对路径,而是使用相对路径或依赖于环境变量是有意义的,因此样本可能是足够通用的,可以很容易地被其他人重用。


    如果在projectproperties>debugging>environment中设置了可执行目录依赖项,则路径存储在".user"文件中。

    假设我在上面提到的字段中设置了这个字符串:"path=c:xyzin"这是存储在".user"文件中的方式:

    PATH=C:\xyz\bin$(LocalDebuggerEnvironment)

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

    尽管如此,它还是完全依赖于项目。你可以根据需要打电话。


    不,它们不应该被提交到源代码管理,因为它们是特定于开发人员/机器的本地设置。

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

    对于SVN,我有以下global-ignore属性集:

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


    推荐阅读