Master large and mid-size Visual Studio solutions

    Getting started


    Motivation

    The basic idea behind Funnel is simple: Load only the projects you are currently working on, all other projects remain unloaded. In this way both the solution loading time and the overall compilation time can be reduced dramatically. An additional UI command is provided, so that the solution and its projects can be reloaded very quickly. The following article provides a deeper description of solution modularization.


    Background

    In order to fulfil possibly required inter-project dependencies, you can either load all dependent projects by toggling the button "Load Dependencies" in the project selection dialog (see screenshot below) or compile the whole solution once before using load filters. In most cases compiling the whole solution once should be preferred for a better development performance - as soon as the solution is compiled, you are ready to use filters, so that only the current aspects of work are loaded and compiled.


    Filtering Projects

    With vsFunnel no preparations have to be done, just open the solution and, if asked in the filter selection dialog, choose every single project to load from the project tree structure (it looks similar to the Solution Explorer tree)


    Filtering Projects

    The Filter button applies the selected filter (it also can be triggered with the Enter key). Alternatively all solution projects can be loaded by choosing the button Skip/Load All or hitting the Esc button.

    If the Load None button is clicked, no projects at all are loaded.


    With the option Load dependencies activated, not only the selected projects are loaded, but also all their dependencies as well.


    The projects visible in the project selection tree can be filtered with the filter text field which is placed above the project selection tree


    Persistent Filters

    With bigger solutions the project tree becomes larger (so that developers have to scroll through the tree to pick the right projects), also if the aspects of work contain more than one or two projects, it can be useful to save the choice from the solution filter selection dialog and re-use it later or even share it with team mates. These is what persistent filters are: named lists of projects (stored in a file beside the solution file) which can be selected at load time.


    Click on the ... button beside the filter selection list to open a menu. Among other things this menu provides a possibility to save the current choice as a persistent filter. In addition the project selection tree provides a context menu with several options, e.g a start project can be set as part of a filter.
    Saved Filters

    Until now we used the filter selection dialog in the simple mode, by clicking onto the advanced button (at the left bottom of the dialog) the dialog can be switched to the advanced mode. The advanced mode is an alternative view which can especially be convenient for a large amount of filters.


    Filter Management Dialog

    To provide a convenient way of running and testing the compiled code, a start project can be defined for each filter. The start project must be in the list of loaded projects and is part of the load filter definition.


    The advanced mode of the filter selection dialog depicted above contains the following main areas:
    • A list of filters on the left
    • A tree of projects to be loaded if the filter is applied (all other projects remain unloaded). This tree looks very similar to the Visual Studio Solution Explorer tree
    • The projects tree provides some content filtering capabilities: filtering projects by title, showing only start projects as well as showing only selected (checked) projects. These content filters can be combined.

    Switch to another solution aspect

    If you want to switch to another solution aspect just hit Ctrl-Shift-Alt-R, go to File/Reload Solution or click on the funnel icon in the toolbar area of Solution Explorer. This is a very quick process.


    Hiding Unloaded Projects in Solution Explorer

    (not applicable for Visual Studio 2010)

    Visual Studio shows all unloaded projects within the Solution Explorer. Funnel provides a Solution Explorer filter which can be applied at start, so that all unloaded projects are hidden.


    Set the toggle button "Hide Unloaded Projects" in the filter selection dialog, to apply the option


    If the option is set, only the relevant projects are shown in the Solution Explorer:


    Solution Explorer: Hidden unloaded projects

    Alternatively you can switch to the view with all projects as shown in the following screenshot:


    Solution Explorer: visible unloaded projects

    The Solution Explorer filter for hiding/showing unloaded projects can be toggled under the Visual Studio File menu.


    Disable Funnel for a specific solution

    Funnel can be disabled for a specific solution. Just choose Skip / Disable Funnel in the filter selection dialog.


    Filtering Projects

    To enable Funnel again, load the solution, select the "Reload solution" menu item provided by Funnel and choose Skip / Enable Funnel in the filter selection dialog.


    Settings Dialog

    Funnel provides several options in the standard Visual Studio Options dialog as shown below


    Visual Studio, Funnel settings dialog


    Loading status workaround
    due to Visual Studio implementation specificss, the projects can be loaded even if they are advised to remain unloaded during the solution loading process. Visual Studio takes the current state of suo files into consideration, which leads to undesirably loaded projects. Funnel implements a workarounds to fix this problem:
    • Unload projects files after load (default) - Undesirably loaded projects are unloaded after the completion of solution loading process
    • Optionally the workaround can by applied with a delay which can also be specified in the settings panel, the default value of 0 specifies that it's applied immediately as soon as the solution loading process is finished.

    Solution Explorer filter (not applicable for Visual Studio 2010)
    • Hide unloaded projects (default) - Unloaded projects are not visible in the Solution Explorer
    • Show unloaded projects - Unloaded projects are visible in the Solution Explorer
    • The solution filter can by applied with a delay which can also be specified in the settings panel, the default value of 0 specifies that it's applied immediately as soon as the solution loading process is finished.

    File extensions
    • Load filters are stored in the solution directory (the location of sln file). There are two types of storage files: private and public which keep the according types of load filters.
      In this option the storage file extensions can be specified.
      Private file extension can be static or dynamically calculated based on the OS user name

    Filter dialog Esc handling
    • Choose what how the Esc key should be handled: Either load all projects (skipping the Funnel filtering process) or cancel the solution load operation. The latter case works only if a solution is reloaded with the Funnel's "Reload Solution" command, it's not applicable if a solution is opened by standard Visual Studio means.

    Default filter type
    • There are two types of load filters: inclusion and exclusion filters.
      Inclusion filters (which is the default type) store all projects which have to be loaded.
      On the contrary exclusion filters store only projects which shall NOT be loaded

    Filter dialog threshold
    • No filter selection dialog is shown until the maximum number of projects specified by this setting is reached. The filter selection dialog is always shown if the threshold is set to 0

    Reset button
    • All can be reset to the default values with a click on this button

    Keyboard shortcuts in the project selection dialog

    The Funnel filter selection dialog provides several keyboard shortcuts, all shortcuts are shown in the tooltips displayed on mouse over.