Visual studio 为什么有.sln、.suo和.csproj文件?

Visual studio 为什么有.sln、.suo和.csproj文件?,visual-studio,git,Visual Studio,Git,我开始使用VisualStudio2010。完成C程序后,我看到项目根目录中有.sln和.suo文件,子目录中有.csproj文件。那些文件是干什么用的 我需要确定要放入Git存储库的文件。连同我创建的源代码/文档,我想这三个文件是我必须处理的唯一文件。但是,我不确定是否跟踪了正确的文件 补充 个人宏文件怎么样?我有,是.sln文件还是.csproj文件有这个宏?您应该提交.sln和.csproj文件,而不是.suo或.user文件 您可以将以下内容添加到.gitignore: #ignore

我开始使用VisualStudio2010。完成C程序后,我看到项目根目录中有
.sln
.suo
文件,子目录中有
.csproj
文件。那些文件是干什么用的

我需要确定要放入Git存储库的文件。连同我创建的源代码/文档,我想这三个文件是我必须处理的唯一文件。但是,我不确定是否跟踪了正确的文件

补充
个人宏文件怎么样?我有,是
.sln
文件还是
.csproj
文件有这个宏?

您应该提交
.sln
.csproj
文件,而不是
.suo
.user
文件

您可以将以下内容添加到
.gitignore

#ignore thumbnails created by windows
Thumbs.db
#Ignore files build by Visual Studio
*.obj
*.exe
*.pdb
*.user
*.aps
*.pch
*.vspscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.cache
*.ilk
*.log
[Bb]in
[Dd]ebug*/
*.lib
*.sbr
obj/
[Rr]elease*/
_ReSharper*/
[Tt]est[Rr]esult*
SLN(解决方案)是解决方案文件。它存储关于项目集合的信息,这些项目构成了您正在开发的内容。它们包含项目、源代码管理设置或任何其他全局级别的内容

CSProj(项目文件)是实际的代码项目(C#库、WCF服务等)。它在项目级别存储信息。它包装了所有相关的引用、类等

SUO(解决方案用户选项)是用户设置文件。完全是一次性的,您可以删除它,最常见的是您将丢失断点


推送除SUO设置文件之外的所有内容

不要包含任何bin、debug、obj目录。您应该包括的唯一DLL(或编译/生成的对象)是应用程序外部的DLL。

来自MSDN:

解决方案(.sln)是用于在Visual Studio中组织项目的结构。它执行VisualBasic 6和VisualC++ 6中的ProjkWorkStudio(.DSW)文件中类似于Windows程序组(.vbg)文件的函数。解决方案在.sln(基于文本的共享)和.suo(二进制,用户特定的解决方案选项)文件中维护项目的状态信息

此外,同样来自MSDN:

解决方案用户选项(.suo)文件是以二进制格式存储的结构化存储或复合文件。您将用户信息保存到流中,流的名称是用于标识.suo文件中信息的密钥


您不需要在VCS中放入
.suo
文件。这是一个特定于用户的文件。

SUO文件确实有其用途,我不同意应该始终忽略它们的说法。我不会忽略它们,通常我会将它们添加到我们的SVN存储库中。我的项目并不总是使用启动项目或平台的解决方案默认值。我发现,如果我抓取一个新项目,它不会默认为64位和合适的平台,这让我很恼火。SUO包含正确设置这些默认值的设置


缺点是它是一个二进制文件,所以几乎每次打开解决方案并执行任何操作时,文件都会发生更改。通常该文件小于100k,除非您知道您更改了某些内容,否则我不会提交更改

如果要共享调试/命令行参数,则将.user文件放入版本中很有用control@Tim:我不同意-默认情况下,.user文件将注册完全限定路径,这在开发人员之间通常无效。但是,您可以通过将相关行从.user文件复制到.csproj文件,在.csproj文件中注册共享调试设置。我不知道这些是完整路径。这是不幸的。她肯定是搞砸了。你的解决方案更好。向上投票。重要提示:除非在第一行添加
语法:glob
,否则此操作无效!这个答案只是提供了一个“什么”,而没有提供任何理解或“为什么”。也可以看到可能的重复添加到评论中。如果您与不止一个人一起工作,您一定要小心。与团队一起工作时,需要注意签入初始版本以获得所需的默认值,但作为开发人员,我从不签入我的版本。
.sln
文件包含开发人员特定的信息,例如他们正在运行的Visual Studio版本。有可能避免这样做吗?否则,每当不同版本上的开发人员提交某些内容时,就会出现噪声差异。