清理Visual Studio解决方案文件夹中的临时文件

11

我正在清理来自不同来源的大量Visual Studio项目/解决方案,每个解决方案中都有大量的临时文件临时文件夹

我想知道哪些文件类型是安全删除的,以便我可以编写脚本来处理重要工作,这样当我试图将整个文件夹结构组织起来并链接到正确的共享文件位置时,就没有那么多垃圾了。

据我所见,以下文件和文件夹是临时的,可以安全删除:

文件

  • *.sdf
  • *.sln.docstates
  • *.suo
  • *.upgradelogxml
  • *.user
  • *.vcxproj.filters
  • *.sln.old
  • *.suo.old
  • UpgradeLog.XML
  • *.wixproj.vspscc
  • *.csproj.vspscc
  • *.SCC
  • *.ncb
  • *.opt
  • *.plg
  • *.aps
  • *.clw

文件夹

  • _UpgradeReport_Files(文件夹)
  • ipch(文件夹)
  • bin、obj、debug、release和其他生成输出文件夹,尽管在构建过程中可能会将文件复制到此处...
  • 备份、备份1等...

我甚至不确定一些这些文件类型到底是什么,我只知道它们在打开解决方案时会重新生成- 我知道还有许多老版和新版Visual Studio的其他文件类型。

在上述列表中是否应保留某些文件类型?如果是,请说明原因,是否还可以清理其他文件类型而没有任何严重的副作用?

总的想法是在迁移、移动、重新组织或其他操作时,尽可能减小解决方案的大小和复杂性,以避免“解决方案过度臃肿”成为严重的性能和管理问题。

通常情况下,当我需要将某些内容检入新的源代码控制系统、通过电子邮件发送示例代码或将第三方或同行的代码放入现有的共享文件夹和文件层次结构中时,就会出现这个问题。


3
我会保留“Bin”文件夹,因为有时它会保存被引用的“.dll”文件。 - Malachi
1
这样的工作区清理程序怎么样:http://www.codeproject.com/Articles/10855/Clean-Visual-Studio-Workspaces - drescherjm
1
尽管我看到之前链接中的应用程序似乎太旧,无法处理许多.NET临时文件。 - drescherjm
1
我尝试过一些“工作区清理工具”,但它们似乎非常容易出现错误和危险。我在想可能需要某种“预览功能”。也许这是CCleaner的一个新功能? - Stein Åsmul
我通过使用CMake进行源外构建来避免在Windows/Visual Studio上进行Qt构建时出现此问题,但是我意识到这种方法在.NET方面效果不佳。 - drescherjm
2
@Malione 当你“清理”一个项目时,bin文件夹会被清空,因此你不应该依赖于引用被缓存在那里。我更喜欢在一个名为“_References”的文件夹中制作引用DLL的硬拷贝。我也建议其他人这样做。 - Dai
2个回答

17

我不同意你列出的“临时”文件清单 - 其中很少有文件是临时的(否则它们会在%TEMP%目录中)。尽管大多数文件对项目的成功构建并不必要,但它们仍然很重要。

  • *.sdf - SQL Server Compact 数据库。用于存储 VC IntelliSense 数据的 VS2012。如果没有此文件,您将无法获得 IntelliSense 和代码完成,直到重新构建。
  • sln.docstates - 存储有关解决方案中文件的临时状态信息。
  • suo - 包含有关每个解决方案 IDE 自定义设置的信息,例如窗口布局和工具箱加载项。通常可以安全地删除此文件,但您的解决方案可能需要更长时间才能加载,并且您将失去任何 UI 自定义。
  • upgradelog.xml - 是的,升级日志文件有点乱。这可以被删除。
  • user - 我确定这是 VC6 时代的旧文件...
  • vcxproj.filters - 保留此文件,它是一个每台计算机/每个项目的文件系统组织列表。
  • sln.oldsuo.old - 我不知道 VS 中是否有任何官方工具重命名任何文件的文件名扩展名为 .old,这很可能是手动备份副本。
  • *.wixproj.vspscc*.csproj.vspscc 或任何 .vspscc 文件和 *.scc 文件 - 这些文件与 VS 使用的旧版(非 git)源控制系统相关联,即 TFS(我想在某个时候也使用 SourceSafe?)。这些文件不应删除,因为它们用于存储(非 git)源控制配置信息,并且在删除绑定文件后重新集成未选中更改到源控制非常痛苦。仅在您不使用源控制或已完全切换到 git 时才删除此文件。
  • *.ncb - VC6 到 2010 年使用的 IntelliSense 缓存。如果删除此文件,您将失去 VC IntelliSense,直到 IDE 重新构建它,在大型项目上可能需要很长时间。

其他文件扩展名默认情况下不被Visual Studio使用,例如列出的.opt.plg.aps.clw - 虽然.opt似乎是Linker输入文件用于TI的Code Composer Studio,因此由于OP在其项目文件夹中具有其他IDE的项目/工作区/配置文件,因此这些文件可能是特定于这些其他IDE的文件,在这种情况下,我无法确定它们是否是临时的。


当然,关键是要在解决方案中正确地安排文件。项目源文件应与项目元数据(即我刚才列出的文件)分开保存,最好在它们自己的层次结构中分别放置在不同的文件夹中(这样您可以为同一源代码拥有多个VC项目文件,允许贡献者同时使用VC2005、2008和2010)。

2
不错的信息。我知道这些文件实际上是有价值的,但当它们被自动生成时,在我看来它们并不是“源文件”。这就是为什么在进入源代码控制或开始大规模洗牌以将事物组织成新结构之前,我希望它们全部消失的原因。就像我不会将输出二进制文件检入源代码控制一样,而是将它们保留在磁盘上的构建区域中。 - Stein Åsmul
1
不需要这样做。VS会自动将输出文件从源代码控制中排除。实际上,VS会自动将诸如智能感知缓存之类的东西从源代码控制中排除。 - Dai
1
我的项目一直很慢,而且显示的智能感知数据不正确(存在错误但实际上并没有),我想找到一种清除临时数据的方法。虽然Day提供的信息很有用,但最终我不同意他的评估,认为这些文件通常不应该被删除,并感谢他提供的删除这些文件的好方法。如果可以确保最终结果干净利落,我不介意构建需要更长的时间。 - omJohn8372
@Dai 一个问题:删除/_UpgradeReport_Files文件夹及其内容(4个图标.png,一个.css和一个.xslt)是否安全?希望下次VS生成upgradeLog.xlm时会重新创建它。 - undefined
1
@JuanPerez 是的,很安全。 - undefined

11

请看回答中列出的文件夹和扩展名,以获取哪些文件通常被认为是非必需的。这个Visual Studio .gitignore问题提供了一些想法。

然而,如果您不知道某个文件的作用,通常情况下删除它并不是一个好主意。例如,.sdf文件可能是SQL Server CE数据库,在某些项目中可能很重要。因此,在运行任何解决方案清理脚本之前,请确保将其备份到其他地方。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接