【问题标题】:Why are there .sln, .suo and .csproj files?为什么会有 .sln、.suo 和 .csproj 文件?
【发布时间】:2011-04-21 21:23:07
【问题描述】:

我开始使用Visual Studio 2010,用完C#程序后,看到项目根目录下有.sln.suo文件,子目录下有.csproj文件.这些文件是干什么用的?

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

添加

个人宏文件怎么样?我有Emacs key switch macro.sln 文件或.csproj 文件有这个宏吗?

【问题讨论】:

标签: visual-studio git


【解决方案1】:

您应该提交.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*

【讨论】:

  • 如果你想共享调试/命令行参数,那么 .user 文件对于放入版本控制很有用
  • @Tim:我不同意——默认情况下,.user 文件将注册完全限定的路径,这通常对开发人员无效。但是,您可以通过将 .user 文件中的相关行复制到 .csproj 文件中来在 .csproj 文件中注册共享调试设置。
  • 我没有意识到那些是完整的路径。这是不幸的。 MS肯定在那里搞砸了。你的解决方案更好。赞成您的评论。
  • 重要提示:除非您将syntax: glob 添加到第一行,否则这将不起作用!
  • 这个答案只是提供了一个“什么”,没有提供任何理解或“为什么”。
【解决方案2】:

SLN(解决方案)是解决方案文件。它存储有关构成您正在开发的任何项目的集合的信息。它们包含项目、源代码控制设置或任何其他全局级别的东西。

CSProj(Project file) 是实际的代码项目(C# 库、WCF 服务等)。它在项目级别存储信息。它包装了所有相关的 References、Classess 等。

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


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

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

【讨论】:

  • .sln 文件包含特定于开发人员的信息,例如它们正在运行的 Visual Studio 版本。是否有可能避免这样做?否则,每当不同版本的开发人员提交某些内容时,我们都会得到噪音差异。
【解决方案3】:

来自 MSDN:

解决方案 (.sln) 是用于在 Visual Studio 中组织项目的结构。它执行的功能类似于 Visual Basic 6.0 中的 Windows 程序组 (.vbg) 文件和 Visual C++ 6.0 中的项目工作区 (.dsw) 文件。该解决方案在 .sln(基于文本,共享)和 .suo(二进制,用户特定的解决方案选项)文件中维护项目的状态信息……[Source]

另外,同样来自 MSDN:

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

您不需要将.suo 文件放入 VCS。那是一个用户特定的文件。

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

    • 添加到评论中。如果您与超过 1 人一起工作,您确实要小心。与团队合作时,需要注意签入初始版本以获得所需的默认值,但作为开发人员,我从不签入我的版本。
    【解决方案5】:

    就我而言,我删除了解决方案和项目中的所有“bin”和“obj”文件夹

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多