The Story of Help in Visual Studio 2010 (Part 2)

This is the second installment in a three-part series about the Visual Studio 2010 help system. Part 1 offers a behind-the-scenes look at the evolution of our new help system. Part 2 is an overview of the help experience delivered with Visual Studio 2010. Part 3 offers a sneak preview of changes coming to the help experience in Visual Studio 2010 Service Pack 1 (SP1).

Part 2 – Overview of Help Viewer 1.0

The Library Experience (LEX) team released Help Viewer 1.0 in April 2010 with Visual Studio 2010. It was the most significant help system update since Visual Studio .NET in 2002. The release of Visual Studio 2010 was accompanied by an update to the online MSDN Library which moved to the new Lightweight experience.

Overview of the Help System

The help system has the following main components: the MSDN & TechNet Publishing System (MTPS) online services that serve up MSDN Library content, the client-side help runtime that manages local content, and the local help viewer. In addition, we deliver the MSDN online library experience. When in online mode, the local viewer consumes the exact same services as those used by the online MSDN Library. In offline mode, the viewer displays content from a local content store. The local content can be updated directly via an MTPS service and we give users fine-grained control over what content they want to have available offline.


In Part 1 of this post, I discussed some of the issues with the old help system. With Visual Studio 2010, the LEX team made progress towards addressing many of those issues.

Elimination of the first-time indexing penalty

In previous versions of Visual Studio, launching help for the first time after installing help content would result in a time-consuming indexing operation. This took place in-process so your IDE was unavailable until indexing completed. We eliminated this indexing penalty in Visual Studio 2010.

Improvements to F1 Help (including support for framework multi-targeting)

Visual Studio 2010 is the first step in a multi-release plan to improve F1 Help. F1 Help is context-sensitive help. In Visual Studio, you can select a window or text in a code editor and press F1 to quickly find help content that is relevant to your selection. Going forward, we’ve established F1 Help relevance as a product-wide quality bar for the release. Improvements to F1 Help in this release include:

  • Corrected issues that would cause F1 resolution problems between WPF and Silverlight topics
  • Addressed version confusion between .NET 3.5 and .NET 4 topics (across different editors)
  • Enabled multi-targeting for .NET Framework versions < 3.5 (online only)
  • Resolved indeterminate topic results between class topics and member topics across the entire managed reference space
  • Found and addressed more than 300 F1 collisions that degraded F1 relevance

Of special note is work done by the C++ team to improve F1 Help for native development:

  • Removed redundant F1 keywords from the top 70% of C++ topics that had the highest user traffic. For example, the “printf” keyword was originally present in four topics and now is present in only one.
  • Revised IntelliSense editor behavior to send the fully qualified name of the identifier instead of just the word under the cursor. For example, “CDialog::Create” instead of “Create.”
  • Worked with the Windows SDK team to better disambiguate between APIs that are in global namespaces. For example, the F1 query now specifies “Winuser.h\CreateWindow” instead of just “CreateWindow”.
  • Added F1 attributes to eliminate collisions between WinCE and .NET topics and better target the correct C++ topic.

Improved local search

Our original plan was to leverage Windows Desktop Search to implement local search. Unfortunately, it was not a good option for us due to the way developers can download massive amounts of pre-indexed help content using the Help Library Manager. Desktop Search uses a more piecewise update model. In Visual Studio 2010, we incorporated a custom search engine that accommodates pre-indexed help content and enables us to iteratively improve offline search relevance over several releases.

On-demand updates from the cloud

One of our key goals with Help Viewer 1.0 was to enable developers to easily pull down the latest content from the cloud. In addition, we wanted to give developers more fine-grained control over their local content. By making content available in this way, we can reduce the amount of preinstalled help which minimizes install time and reduces space used on disk. The ability to download only the help that you need can lower the cost of downloading content (especially for users with expensive broadband connections). Our Visual Studio Express SKUs download and install quickly by incorporating very little documentation in the core product.

Standards-based help format

We moved from a proprietary format requiring a proprietary viewer to a standards-based format that can be read using your browser-of-choice. With these changes, we wanted to pave the way for a new help ecosystem with a variety of viewers, rich authoring tools and the ability to share these new help capabilities with our partners and customers.

…and a new online experience as well

In conjunction with Visual Studio 2010 RTM, the Lightweight view became the default experience in our online MSDN Library. Lightweight is a faster, cleaner experience that reduces visual complexity, makes it easier to orient oneself in the Table of Contents and displays more content above the fold.

While many of the capabilities of the new help system – especially the elimination of the first-time indexing penalty – were well-received, the product garnered some suggestions and criticisms as well. We’ll cover those in Part 3.

Next: Help Viewer Improvements in SP1

Installments in this series:

1 – Why A New Help System?
2 – Overview of Help Viewer 1.0
3 – Help Viewer Improvements in SP1

This entry was posted in Microsoft Help Viewer, Visual Studio 2010. Bookmark the permalink. Both comments and trackbacks are currently closed.