.sln是否应该致力于源代码控制?


101

将.sln文件提交到源代码管理是最佳实践吗?什么时候合适或不合适?

更新 答案中有几点要点。感谢您的回复!


21
我相信这是您不想提交的.SUO文件。
apandit

仅作记录,我相信Task列表(如果使用它们)存储在.SUO文件中。因此,尽管您可能不想将它们提交到源代码管理中,但您可能不想将它们“删除”为无关紧要的东西。
Benjol

Answers:


69

我认为从其他答案中可以明显看出,即使未将解决方案文件用于官方构建,它们也应该提交。对于使用诸如转到定义/声明之类的Visual Studio功能的任何人来说,它们都很方便。

默认情况下,它们不包含绝对路径或任何其他特定于机器的工件。(不幸的是,某些加载项工具无法正确维护此属性,例如AMD CodeAnalyst。)如果您谨慎使用项目文件中的相对路径(C ++和C#),它们将与计算机无关太。

可能更有用的问题是:您应该排除哪些文件?这是我的VS 2008项目的.gitignore文件的内容:

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

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

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

ipch/
*.sdf
*.opensdf

2
对于单元测试结果,我也有一个忽略规则。某些人可能会检查它们,但我不喜欢混乱
Matthew Whited 2009年

9
+1-我个人也不承诺构建任何东西,因此bin /和obj /
Steven Evers

我只提交包含多个项目的.sln文件
贾斯汀(Justin)2009年

2
这是我的Subversion全局忽略模式:* .vsmdi * .suo * / [Bb]在* / obj obj TestResults *。[Ub] * Thumbs.db * Web.Publish.xml * WebApplication.Publish中。 xml * Web.log
Merritt

是一个常见的共享.gitignore文件,其中包括临时文件,生成结果以及流行的Visual Studio加载项生成的文件。
劳伦·范·史朗


20

是的,您应该这样做。解决方案文件仅包含有关解决方案总体结构的信息。该信息是解决方案的全局信息,可能对您项目中的所有开发人员都是通用的。

它不包含任何用户特定的设置。



8

我通常同意应签入解决方案文件,但是在我工作的公司,我们做了一些不同的事情。我们有一个相当大的存储库,开发人员会不时在系统的不同部分上工作。为了支持我们的工作方式,我们将拥有一个大解决方案文件或多个小解决方案文件。两者都有一些缺点,需要开发人员进行手动操作。为了避免这种情况,我们制作了一个插件来处理所有这些问题。

通过该插件,每个开发人员只需从存储库中选择相关项目,即可签出要处理的源树子集。然后,插件会生成解决方案文件,并针对给定的解决方案即时修改项目文件。它还处理引用。换句话说,开发人员要做的就是选择适当的项目,然后生成/修改必要的文件。这也使我们能够自定义各种其他设置以确保公司标准。

另外,我们使用该插件来支持各种签入策略,这通常可以防止用户向存储库提交错误/不合规的代码。


听起来这可能是我一个长期未解决的问题(stackoverflow.com/questions/1490728/…)的答案,是否有机会获得此插件的副本?
Benjol

@Benjol:抱歉,不,这是一个内部工具。除了上面的功能外,它还与许多其他内部系统集成,因此它非常特定于我们的运行方式。如果您只需要解决方案/项目的一部分,那么实现起来就不会那么困难。
Brian Rasmussen 2010年

好的,只有一件事,在您的“大解决方案”中,您有项目引用还是文件引用?并且,如果开发人员向文件/项目添加了新的引用,那么插件在签入之前是否进行了适当的转换?以及如何处理开发人员未选择签出的依赖项?
Benjol

8

是的,您应该提交的内容是:

  • 解决方案(* .sln),
  • 项目文件,
  • 所有源文件
  • 应用程序配置文件
  • 构建脚本

你应该事承诺是:

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

关于其他自动生成的文件,有一个单独的线程


1
我不得不不同意“任何自动生成的文件”。
Mehrdad Afshari

@Mehrdad您是否也应该提交Intelisense文件?
Edison Gustavo Muenz 09年

1
@爱迪生:不。例如,我指的是自动生成的源文件,例如LINQ to SQL数据上下文。
Mehrdad Afshari

2
Formname.Designer.cs文件不是自动生成的吗?
杰森2009年

1
我的意思是在构建期间生成文件。我经常发现这种情况-有人提交了一个自动生成的文件,然后SVN报告更改,只是因为某些注释已更改。
Groo

5

是的,它应该是源代码管理的一部分。每当您从应用程序中添加/删除项目时,.sln都会得到更新,最好在源代码控制下进行。它将允许您拉回应用程序代码2版本并直接进行构建(如果需要的话)。


5

在大多数情况下,将.sln文件提交到源代码管理是一个好主意。

如果您的.sln文件是由其他工具(例如CMake)生成的,那么将它们放入源代码管理中可能是不合适的。


4

是的,您始终希望包含.sln文件,该文件包含解决方案中所有项目的链接。


2

我们这样做是因为它使所有内容保持同步。所有必要的项目都放在一起,并且没有人会担心丢失一个项目。我们的构建服务器(Ant Hill Pro)也使用sln来确定要为发行版本构建的项目。


2

通常,我们将所有解决方案文件都放在一个解决方案目录中。这样,我们就将解决方案与代码分离了一点,并且更容易挑选出我需要处理的项目。


1

甚至不考虑将其存储在源代码管理中的唯一情况是,如果您有一个大型解决方案,其中包含处于源代码管理中的许多项目,并且您想从主解决方案中的一些项目中创建一些小型解决方案私人暂态要求。


1

是的-用于生成产品的所有内容都应在源代码管理中。


1

我们将文件或解决方案文件保留在TFS版本控制中。但是由于主解决方案确实很大,所以大多数开发人员都有一个仅包含他们所需内容的个人解决方案。主要解决方案文件主要由构建服务器使用。


0

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


1
真可笑... SLN是我必须修复的唯一文件...但是问题是由于开发人员对合并不谨慎所致。
马修·怀特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.