September 12th, 2024

VisualStudio.Extensibility 17.11: Settings and more Remote UI support

Dominic Nahous
Senior Lead Program Manager

We continue to invest in the VisualStudio.Extensibility SDK to allow users like you to create extensions that run faster and smoother than ever before! VisualStudio.Extensibility helps you build extensions that run outside the main Visual Studio IDE process for improved performance and reliability. Additional benefits include a sleek and intuitive .NET 8-based API and comprehensive, well-maintained documentation to help you develop amazing extensions faster than ever before.

This 17.11 release builds on our previous releases, bringing support for defining user-configurable settings for your extensions to allow your users to customize their experience along with even more enhancements to remote UI features. We’ve also made substantial updates to our project query API documentation.

For the latest up-to-date docs and installation instructions, visit https://aka.ms/VisualStudio.Extensibility. We encourage you to report bugs and suggest features via the issue tracker on our GitHub repo, where you can also find extension samples to help you get started.

What’s new for VisualStudio.Extensibility?

Our 17.11 release of VisualStudio.Extensibility includes the following features:

  • Customize your extensions further with settings support
  • Show images and use context menus in Remote UI
  • Enhance your tool windows with toolbars

We’ve also refreshed and updated the project query API documentation based on feedback from extension developers like you!

Customize your extensions further with settings support

With this release of VisualStudio.Extensibility, we’ve enabled a handful of APIs that allow you to define settings for your extensions. This allows your end users to alter the behavior of the extension by adjusting values you’ve elected to define as settings.

In order to support this scenario, you’ll now find APIs specific to defining, accessing, and writing settings in your extension. To add settings to your extension, first add a definition for your setting in a class in the extension.

If you’d like to learn more about how to define and leverage settings in your apps, refer to the VisualStudio.Extensibility settings article. You’ll find more details along with samples to get you coding quickly!

Note that the settings API, like VisualStudio.Extensibility, supports Hot Loading of settings. This allows your extension’s settings to be discovered without requiring your users to restart Visual Studio.

Show images and use context menus in Remote UI

As the VisualStudio.Extensibility model prioritizes extensions running outside of the Visual Studio process, it introduces a challenge when adding UI support to extensions as most UI frameworks are in-process. To get around this, there is a set of classes called Remote UI that allow you to define WPF controls in an out-of-process extension and then show them as part of the Visual Studio UI.

With this release, you can now add a context menu to a Remote UI control from XAML, a familiar experience if you’ve ever added a context menu in standard WPF. You’ll also be able to use Remote UI XAML to show either custom images or images that already exist in the Visual Studio catalog. This gives you additional options for providing users with useful information in a visual format and can help you increase your extension’s UI appeal!

Visit the Other Remote UI concepts documentation for code samples and more information.

Enhance your tool windows with toolbars

You can now use VisualStudio.Extensibility to add toolbars to your extension’s tool windows to give your users a quick and easy way to access or leverage features in your extension.

See the Add a toolbar to a tool window section in the tool window overview doc to learn more about creating, adding content to, showing, and controlling the visibility of tool windows – and of course to learn more about adding toolbars to those tool windows.

Project Query API documentation updates

In response to your valuable feedback, we have revamped our documentation to better serve your needs. As we transition to a new model, our project query documentation is evolving to leverage VisualStudio.Extensibility project query wrappers for accessing and modifying solutions/projects. To explore the updated documentation, please refer to Query the Project API (VisualStudio.Extensibility). For details specific to project query using Visual Studio SDK, you can visit Query the Project API (Visual Studio SDK).

About experimental APIs, breaking changes, and how we make decisions about VisualStudio.Extensibility

In reviewing feedback from our issue tracker, we realized it would be useful to outline information about some of the decisions we’ve made around VisualStudio.Extensibility. With this new extensibility model, we carefully consider exactly what should and should not be supported based on two major criteria: your feedback and the design goals of the project. One recent example: we decided not to support the ability to programmatically invoke VSCT (Visual Studio Command Table)-based commands via VisualStudio.Extensibility. This decision aligned with established principles for VisualStudio.Extensibility for a few reasons:

  • VSCT based commands are synchronous. VisualStudio.Extensibility extensions operate asynchronously in a separate process.
  • As there’s no guarantee that UI state will remain coherent due to the asynchronous nature of the invocation from another process or thread, allowing invocation could lead to unpredictable user experiences.
  • VSCT-based commands allow input and output of any type. VisualStudio.Extensibility extensions can run out of process. This imposes limitations around the types of input and output data that can be serialized.
  • Direct command invocation breaks our commitment to having consistent, easy-to-use APIs as it would essentially introduce another set of APIs that are more macro/script-like.

As we continue increasing the surface area of the VisualStudio.Extensibility SDK, we’ll rely on this framework to inform decisions on API coverage and availability. The API is growing and changing. We aim to minimize breaking changes and ensure stability and a consistent experience for you, our extension developers. When we make changes because of customer feedback or internal changes, we’ll communicate it formally with plenty of notice on the VisualStudio.Extensibility breaking changes page. We’ll use the following guidelines for breaking changes to experimental APIs:

  • Breaking changes can be made as part of LTSC minor version releases of Visual Studio.
    • A list of breaking changes for the release will be shared by Preview 2 of that release.
    • The list will be shared in the breaking changes doc linked above.
  • Removal of APIs may be formally deprecated by marking the type or by using the [Obsolete] attribute.
    • This will also happen by Preview 2 of the release in which they’ll be removed.

Most APIs in VisualStudio.Extensibility are stable, which means we do not plan to make any breaking changes to them. For these, we want to replicate the stability expectations associated with the existing VS SDK:

  • Breaking changes to VisualStudio.Extensibility APIs or RPC contracts will only happen as part of a major version release of Visual Studio.
    • The list of breaking changes will be available by Preview 1 of the release.
  • Any API removal will happen formally by marking the type or by using the [Obsolete] attribute.
  • Demotion of stable APIs to experimental is considered a breaking change and will be formally announced.

We can’t do this without you!

The time and effort you’ve spent reporting issues and sharing suggestions so far has been instrumental in shaping VisualStudio.Extensibility. We need your help as we continue to develop VisualStudio.Extensibility! Please try out this preview release and let us know what you think. Check out the docs, browse the code samples, and build your first extension. You can send feedback and report issues through our issue tracker.

To request features, look at Developer Community to see if someone else made a similar request first. Create a new one if you can’t find a similar request. By checking for similar requests and upvoting and commenting on them, you help us better prioritize requests. Give VisualStudio.Extensibility a try today and share your thoughts with us!

Author

Dominic Nahous
Senior Lead Program Manager

Dominic is a Senior Lead Program Manager for Visual Studio and Visual Studio for Mac. His team focuses on ensuring a delightful experience for developers on both Windows and Mac.