使用解决方案筛选器仅加载所需的项目

基拉·韦斯

与许多其他开发人员一样,您可能在一个VisualStudio解决方案中包含数百或数千个项目的超大代码库中工作。然而,您可能只处理其中的几个项目及其依赖项。我们的VisualStudio团队已经看到开发人员使用多种方法来加载和处理他们需要的项目。解决方案过滤器是一种新的推荐方法,它为您提供了一个重点突出、性能更高的工作空间。

什么是解决方案过滤器?

VisualStudio中的解决方案筛选器允许您有选择地加载和使用所需的项目。例如,如果您在一个包含数百个项目的存储库中工作,您可能只需要其中的一小部分。解决方案过滤器将简化您的工作,在加载和卸载项目之间有明确的区别。无论何时打开或关闭解决方案,VisualStudio都会记住并加载上一个会话中加载的项目。您可以选择将项目子集保存为解决方案筛选器文件,以.slnf结尾。这个.slnf文件引用了您的主解决方案文件,因此它会打开整个解决方案,但只加载.slnf文件中的项目。您可以选择将此文件保存在本地,与团队中的其他开发人员共享,或在不同计算机上的新Visual Studio实例之间共享。

案例研究|使用解决方案过滤器的组织

Microsoft的Edge

Microsoft的web浏览器Edge构建在铬OS存储库,包含数千个项目。过去,许多微软的Edge开发人员每天至少打开10000个项目,有些甚至运行了多个VisualStudio实例。许多Edge开发人员倾向于使用较小的项目子集。Visual Studio和Edge团队合作,将解决方案筛选器集成到他们的开发人员工作流程中。

Edge开发人员Luis从每天开放10080个项目发展到每天不到150个项目。在他开始使用解决方案过滤器之后,由于他只加载了与其工作相关的项目和依赖项,所以他的整个经验都得到了改进!类似地,Edge开发人员Cliff现在在一个Solution Filter中工作,有6-10个项目,他说“Solution Filters极大地改善了他的Visual Studio体验。”

企业公司

一个大型企业客户报告说,他们有20个不同的子团队,每个团队在更大的解决方案中处理自己的代码领域。作为一种变通方法,他们过去为20个不同的子团队创建了20个单独的解决方案。这些解决方案需要定期重新生成,如果开发人员跨团队协作,则需要加载多个解决方案。

相反,该公司创建了20个单独的解决方案过滤器(每个团队一个),这些过滤器嵌套在较大的解决方案中。他们的每个开发人员都可以拥有自己的重点工作区,访问共享的代码片段,并在需要时切换到整个解决方案。该公司认为解决方案过滤器“……我们所有的希望和梦想……在VS2019中,没有任何其他功能比这更重要了。”

Microsoft的Azure计算

微软团队Azure Compute拥有庞大的存储库,他们的开发人员不需要在团队工作流之外加载所有代码。为了最大限度地提高生产效率,Visual Studio团队默认为其解决方案启用了解决方案筛选器。这意味着每次开发人员首次打开Azure Compute时,都不会加载任何项目。首次选择要加载的项目时,他们可以右键单击以加载任何项目的直接依赖项或整个依赖项树。初始打开后,VisualStudio会记住开发人员加载的所有项目,并在随后的VisualStudio打开中加载此项目子集。Azure Compute团队发现将解决方案过滤器设置为默认的打开工作流非常有用,现在正在考虑扩展此工作流!

如何创建自己的解决方案筛选器?

开始使用解决方案过滤器既快捷又简单!您只需创建一次解决方案筛选器,然后就可以随时使用它,并在需要时轻松编辑其内容。解决方案筛选器文件可以与其他开发人员共享,但不一定需要提交给源代码管理。

解决方案筛选器演示Gif

  1. 选择打开项目或解决方案在起始页上。
  2. 在“文件打开”对话框中,选择所需的解决方案。在打开之前,单击不加载项目复选框在“打开项目/解决方案”对话框的底部。(或者,如果从命令行打开解决方案,请使用/donotloadprojects命令。)
  3. 单击复选框后,选择正常开放并且您的解决方案将在VisualStudio中加载0/x个项目。
  4. 通过右键单击并选择,选择要加载的项目重新加载项目或通过单击加载项目及其整个依赖关系树重新加载具有依赖项的项目.
  5. 可选:对于任何加载的项目,右键单击以加载整个依赖项树或直接依赖项。
  6. 可选:选择隐藏或显示卸载的项目。
  7. 可选:另存为解决方案筛选器(.slnf),以便您可以保存此项目子集并在将来访问它。此.slnf文件保存在解决方案文件夹中,并将显示在最近的菜单中。

其他解决方案筛选用例

以下是一些用户利用解决方案过滤器满足个人和团队需求的用例。

作为个人开发人员,您可以通过加载最常用的项目来自定义解决方案筛选器。对于这种情况,您的团队可以将.slnf文件类型添加到git ignore文件中,以确保团队成员不会意外签入一组文件。

如果您的团队使用大型解决方案,那么您可能还有数百个测试项目。对于大部分工作,这些测试项目可能是不必要的。您可以创建排除单元测试的解决方案筛选器。当您需要测试时,可以在解决方案过滤器和整个解决方案之间轻松切换。

当一个新的团队成员加入时,试图理解数百个项目可能会让人难以接受,尤其是当只需要几个项目就可以开始的时候。因此,您可以创建简单的解决方案过滤器,使您的新团队成员在扩展到整个存储库之前,能够在其指定的区域加快速度。

如果您的解决方案包含大量DLL,则删除那些不定期使用的DLL并将其保存在解决方案筛选器中是有益的。如果特定任务需要这些DLL,则可以轻松切换回完整解决方案。

您的团队可能已经拥有单独的解决方案文件或文件夹(甚至是解决方案过滤器的内部构建版本),其中包含代码的后端和前端部分。如果您只在其中一个领域工作,请创建一个只包含该部分代码的解决方案筛选器,并与您的团队共享。

如果您的解决方案包含多段依赖于共享代码的特定于客户端的代码,我们听说过团队会为每个客户端创建单独的解决方案。相反,您可以为每个客户机的代码创建一个解决方案筛选器。在这种情况下,除了正在处理的代码外,您不必加载任何客户端代码,但仍然可以依赖于编译所需的所有共享项目。

解决方案过滤器是改善大型解决方案开发人员体验的持续过程的关键部分。您还有没有其他未提及的用例?我们想听听你是如何使用解决方案过滤器的!请发送电子邮件vssolutionload@microsoft.com提供有关解决方案筛选器的任何反馈。要了解有关解决方案筛选器的更多信息,以及它们如何改善您的Visual Studio体验,单击此处.

6条评论

讨论结束。登录以编辑/删除现有评论。

  • 查克·瑞恩 0

    也许我已经厌倦了…

    我读了这篇文章,我唯一的收获是“太棒了……还有一件事需要维护/调试/支持”。

    让我们将解决方案添加到主解决方案中不是更容易吗?这似乎比让每个开发人员使用不同的项目子集更容易管理。

  • 霍耀元 0

    溶液过滤器今天仍然无法正常工作。我甚至无法确定地将slnf添加到MRU中。
    有时,当我双击一个slnf时,它会将相应的sln带入MRU。从MRU中清除sln没有效果。

  • Mike-E公司 0

    这是一个非常强大的功能,真的需要关注可用性和热爱。为什么您要求用户使用繁琐的“右键单击解决方案”来创建新过滤器?这既不可发现,也不具吸引力。

    它应该是一个对话框,您可以在其中检查所需过滤器中的项目,并从中创建一个新项目。它应该有它自己的文件->打开->等菜单和一切。应该有一个平滑的所有过滤器下拉列表,以便快速加载不同的过滤器,并承担解决方案的不同角色/区域。我可以在这里继续。😛

    请在这个功能背后投入更多资源,并用一些魔法来充实它。✨🙏

  • 马克斯·哈穆利亚克 0

    实际上我写了一个博客关于上个月的这个。除了它不适用于全局模式之外,我发现它非常有用。

    如果你对我的文章有任何反馈,请告诉我🙂

  • 埃利·布莱克 0

    在过去的几个月里,我们一直在使用解决方案过滤器,但仍有许多小错误需要解决。希望它们能尽快解决,因为溶液过滤器非常棒!🙂

反馈usabilla图标