菜单

Visual Studio 和 .NET

相关源文件

目的与范围

本文档提供了 Visual Studio 和 .NET 开发环境的 gitignore 模式的详细解释。它涵盖了在使用 Visual Studio 项目、.NET Framework、.NET Core 以及相关工具和插件时应从版本控制中排除的模式。有关 JetBrains IDE(包括用于 .NET 开发的 Rider)的信息,请参阅 JetBrains IDE

Visual Studio 和 .NET Gitignore 模式概述

Visual Studio gitignore 模板是 GitHub gitignore 仓库中最全面的模板之一,反映了 Visual Studio 生态系统的复杂性以及开发过程中生成的文件种类繁多。

来源:VisualStudio.gitignore1-400

用户特定文件

用户特定文件包含不应在开发者之间共享的个人设置和偏好。

文件模式描述
*.rsuser远程会话的用户特定文件
*.suo解决方案用户选项(二进制文件)
*.user用户特定的项目设置
*.userosscache用户特定的选项缓存
*.sln.docstates解决方案的文档状态
*.userprefsMonoDevelop/Xamarin Studio 用户偏好设置

这些文件存储个人 IDE 设置、调试配置和其他用户特定选项,不应在开发者之间共享,因为它们会导致冲突并可能覆盖他人的偏好。

来源:VisualStudio.gitignore6-14

构建结果和制品

构建输出是可由项目构建重新生成的文件,不应纳入版本控制。

该模板排除所有构建输出目录,例如 [Dd]ebug/[Rr]elease/[Bb]in/[Oo]bj/,以及特定平台的构建文件夹,例如 x64/x86/[Aa][Rr][Mm]/[Aa][Rr][Mm]64/

它还忽略编译期间生成的各种中间文件,例如 *.obj*.pdb(程序数据库文件)、*.ilk(增量链接文件)等。这些文件是二进制文件或大文本文件,每次构建都会更改,并且可以从源代码重新生成。

来源:VisualStudio.gitignore19-33 VisualStudio.gitignore72-101

Visual Studio 缓存和选项

Visual Studio 会创建各种缓存和选项文件,这些文件应被排除。

缓存类型文件或目录模式目的
VS 缓存目录.vs/VS 2015/2017/更新版本的缓存目录
生成的代码Generated\ Files/VS 2017 自动生成的文件
Intellisense 缓存ipch/IntelliSense 预编译头文件
VC 数据库*.VC.db, *.VC.VC.opendbVisual C++ 数据库文件
VS 跟踪文件*.e2eVisual Studio 跟踪文件
本地历史记录.localhistory/, .vshistory/VS 历史记录文件

`.vs/` 目录包含缓存文件、本地选项和 IntelliSense 数据。由于这些文件会根据需要由 Visual Studio 重新生成,因此不应提交到仓库。

来源:VisualStudio.gitignore35-41 VisualStudio.gitignore107-115 VisualStudio.gitignore365-368

NuGet 包管理

NuGet 是 .NET 的包管理器。gitignore 模板排除包文件和目录,同时允许灵活的包还原。

该模板排除 NuGet 包文件(*.nupkg*.snupkg)、packages 目录(**/[Pp]ackages/*)和 NuGet 配置文件(*.nuget.props*.nuget.targets)。它对与构建相关的包文件(!**/[Pp]ackages/build/)做了例外处理,这些文件可能是 MSBuild 目标所必需的。

来源:VisualStudio.gitignore197-209 VisualStudio.gitignore60-63

测试结果和代码覆盖率

测试框架会生成结果和覆盖率数据,这些数据不应提交。

测试框架忽略的模式描述
MSTest[Tt]est[Rr]esult*/, [Bb]uild[Ll]og.*测试结果和构建日志
NUnit*.VisualState.xml, TestResult.xml, nunit-*.xmlNUnit 测试结果
代码覆盖率*.coverage, *.coveragexml, coverage*.json, coverage*.xml覆盖率数据文件
BenchmarkDotNetBenchmarkDotNet.Artifacts/基准测试结果

所有这些文件都包含临时测试结果,可以通过重新运行测试来重新生成。提交它们会导致不必要的冲突和仓库膨胀。

来源:VisualStudio.gitignore43-50 VisualStudio.gitignore147-154 VisualStudio.gitignore57-58

Visual Studio 附加组件和扩展

许多 Visual Studio 扩展会生成自己的文件,这些文件应被排除。

该模板排除由流行扩展生成的文件,例如

  • ReSharper: _ReSharper*/, *.[Rr]e[Ss]harper, *.DotSettings.user
  • 代码覆盖率工具:.axoCover/*, *.dotCover, OpenCover/
  • 测试框架:_NCrunch_*, *.ncrunch*.local.xml
  • 文档工具:*.GhostDoc.xml
  • 构建工具:_TeamCity*, .fake/

这些文件包含用户特定设置、临时数据或可重新生成的数据,因此不应包含在版本控制中。

来源:VisualStudio.gitignore132-153 VisualStudio.gitignore325-326 VisualStudio.gitignore68-69

.NET 项目类型

该模板解决了各种 .NET 项目类型的特殊要求。

项目类型忽略的模式描述
.NET Core/5+project.lock.json, project.fragment.lock.json, artifacts/.NET Core 包锁定文件
ASP.NETScaffoldingReadMe.txtASP.NET 骨架生成自述文件
Windows 应用商店AppPackages/, BundleArtifacts/, Package.StoreAssociation.xml商店应用打包文件
Silverlight/RIAGenerated_Code/Silverlight 的生成代码
Azurecsx/, *.build.csdef, ecf/, rcf/Azure 特定文件

所有这些项目类型都会生成其自身独特的,通常应从版本控制中排除的文件。

来源:VisualStudio.gitignore60-66 VisualStudio.gitignore219-226 VisualStudio.gitignore211-218 VisualStudio.gitignore253-254

SQL Server 和数据库文件

包含数据库组件的 Visual Studio 项目会生成多个数据库文件。

文件模式描述
*.mdfSQL Server 数据库主数据文件
*.ldfSQL Server 数据库日志文件
*.ndfSQL Server 次数据文件
*.jfmSQL Server 日志文件
*.dbmdl数据库模型文件
*.dbproj.schemaview数据库架构视图文件

这些文件包含数据库数据或架构信息,通常不应提交到源代码管理。应通过 SQL 脚本或迁移来跟踪数据库更改。

来源:VisualStudio.gitignore266-269 VisualStudio.gitignore238-240

Visual Studio 版本差异

gitignore 模板考虑了不同 Visual Studio 版本。

模板包含以下模式

  • Visual Studio 6:*.plg*.opt*.vbw
  • Visual Studio 2015+:.vs/ 缓存目录
  • Visual Studio 2017+:Generated\ Files/MigrationBackup/
  • Visual Studio Code:.vscode/*(但会排除常见的共享配置文件)

这确保了模板可以适用于从旧版 VS6 到现代 VS Code 的多个 Visual Studio 版本。

来源:VisualStudio.gitignore290-308 VisualStudio.gitignore35-36 VisualStudio.gitignore40-41 VisualStudio.gitignore373-374 VisualStudio.gitignore382-390

与其他开发工具集成

Visual Studio 项目通常与会生成自己文件的其他开发工具集成。

工具类别忽略的模式描述
Node.js 工具.ntvs_analysis.datnode_modules/VS 的 Node.js 工具
Python 工具__pycache__/*.pycVS 的 Python 工具
Web 开发.sass-cache/Sass/SCSS 缓存文件
移动开发.mfractor/Xamarin 生产力工具
Unity 集成与 Unity 模板共享的各种模式VS 中的 Unity 项目文件

这些集成展示了 Visual Studio gitignore 模板如何适应开发者可能与 Visual Studio 一起使用的各种工具生态系统。

来源:VisualStudio.gitignore286-288 VisualStudio.gitignore329-330 VisualStudio.gitignore165-166 VisualStudio.gitignore361-362

自定义模板

该模板包含注释掉的行,有助于开发者根据自己的特定需求进行自定义。

# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# Including strong name files can present a security risk
#*.snk

# Since there are multiple workflows, uncomment next line to ignore bower_components
#bower_components/

# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config

这些注释掉的部分为具有不同需求的项目提供了灵活性,允许开发者根据需要取消注释特定行。

来源:VisualStudio.gitignore37-38 VisualStudio.gitignore245-247 VisualStudio.gitignore249-251 VisualStudio.gitignore205-206

最佳实践

使用 Visual Studio gitignore 模板时,请考虑以下最佳实践

  1. 将模板包含在仓库根目录,而不是项目子目录中
  2. 了解正在排除哪些模式以及原因
  3. 根据您的项目需求,考虑取消注释哪些注释掉的部分
  4. 请记住,某些敏感文件(如 *.pfx 证书)默认情况下会被排除
  5. 对于 .NET Core 项目,请确保排除 artifacts/,因为它包含构建输出
  6. 对于集成了多种技术(例如 Angular 和 ASP.NET)的项目,请考虑组合使用多个模板

遵循这些实践将有助于确保您的存储库保持整洁,没有不必要的文件,同时包含所有必需的源代码和配置。

来源:VisualStudio.gitignore1-4 VisualStudio.gitignore37-38 VisualStudio.gitignore60-63 VisualStudio.gitignore242-243