Should a .sln be committed to source control?

Is it a best practice to commit a .sln file to source control? When is it appropriate or inappropriate to do so?

Update There were several good points made in the answers. Thanks for the responses!

33944 次浏览

是的——我认为这总是合适的。用户特定的设置在其他文件中。

Yes you should do this. A solution file contains only information about the overall structure of your solution. The information is global to the solution and is likely common to all developers in your project.

It doesn't contain any user specific settings.

是的,您总是希望包括。Sln 文件,它包含指向解决方案中所有项目的链接。

我们这样做是因为它保持一切同步。所有必要的项目都放在一起,没有人会担心缺少一个。我们的构建服务器(Ant Hill Pro)也使用 sln 来确定要为某个版本构建哪些项目。

. slns 是我们 没有在 tfs 中唯一有问题的东西!

是的,它应该是源代码控制的一部分。 无论何时从应用程序中添加/删除项目,。Sln 将得到更新,并且最好将它置于源代码控制之下。它将允许您取出应用程序代码2版本,并直接进行构建(如果需要的话)。

你绝对应该拥有它。除了其他人提到的原因之外,还需要使整个项目的一步构建成为可能。

Yes, things you should commit are:

  • 解决方案(* . sln) ,
  • 工程项目档案,
  • 所有源文件,
  • app config files
  • build scripts

Things you should 没有 commit are:

  • 解决方案用户选项(. suo)文件,
  • 构建生成的文件(例如使用构建脚本) [编辑: ]——只有在所有必要的构建脚本和工具都在版本控制下可用的情况下(以确保构建在 cvs 历史中是真实的)

对于其他自动生成的文件,有一个 separate thread

唯一可以考虑不将其存储在源代码管理中的情况是,如果您有一个包含许多源代码管理项目的大型解决方案,并且您希望使用来自主要解决方案的一些项目创建一个小型解决方案,以满足一些私有的瞬态需求。

Yes - Everything used to generate your product should be in source control.

我一般同意解决方案文件应该签入,但是,在我工作的公司,我们已经做了一些不同的东西。我们有一个相当大的存储库,开发人员不时地处理系统的不同部分。为了支持我们的工作方式,我们要么有一个大的解决方案文件,要么有几个小的。这两者都有一些缺点,需要开发人员进行手工操作。为了避免这种情况,我们制作了一个插件来处理所有这些问题。

该插件允许每个开发人员通过从存储库中选择相关的项目来检查要处理的源树的子集。然后,该插件生成一个解决方案文件,并动态修改给定解决方案的项目文件。它还处理引用。换句话说,开发人员所要做的就是选择适当的项目,然后生成/修改必要的文件。这也允许我们定制各种其他设置,以确保公司标准。

Additionally we use the plug-in to support various check-in policies, which generally prevents users from submitting faulty/non-compliant code to the repository.

我们在 TFS 版本控制中保存或解决方案文件。但是因为或者说主要的解决方案实际上很大,所以大多数开发人员都有一个只包含他们需要的个人解决方案。主要的解决方案文件主要由构建服务器使用。

我们通常将所有解决方案文件放在一个解决方案目录中。通过这种方式,我们可以将解决方案与代码稍微分离开来,从而更容易挑选出我需要处理的项目。

我认为从其他答案中可以清楚地看出,解决方案文件是有用的,应该提交,即使它们不用于正式构建。对于任何使用 VisualStudio 特性(如转到定义/声明)的人来说,它们都很方便。

默认情况下,它们不包含绝对路径或任何其他特定于计算机的工件。(不幸的是,一些外接程序工具没有正确地维护这个属性,例如 AMD CodeAnalyst。)如果在项目文件(C + + 和 C #)中小心使用相对路径,它们也将是独立于机器的。

Probably the more useful question is: what files should you exclude? Here's the content of my .gitignore file for my VS 2008 projects:

*.suo
*.user
*.ncb
Debug/
Release/
CodeAnalyst/

(最后一个条目仅用于 AMD CodeAnalyst 分析器。)

对于 VS 2010,您还应该排除以下内容:

ipch/
*.sdf
*.opensdf

Under most circumstances, it's a good idea to commit .sln files to source control.

If your .sln files are generated by another tool (such as CMake) then it's probably inappropriate to put them into source control.