<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Extensions | The .NET Blog</title><link>https://thedotnetblog.com/tags/extensions/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>en</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Wed, 13 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/tags/extensions/index.xml" rel="self" type="application/rss+xml"/><item><title>SDK-Style Support for Extension Projects in Visual Studio</title><link>https://thedotnetblog.com/news/emiliano-montesdeoca/sdk-style-support-extension-projects-visual-studio/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/news/emiliano-montesdeoca/sdk-style-support-extension-projects-visual-studio/</guid><description>Visual Studio 18.5 brings officially supported SDK-style project format to VSSDK-based extensions, cutting build times by up to 75% and reducing project files to ~20 lines.</description><content:encoded>&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/visualstudio/sdk-style-support-for-extension-projects/"&gt;SDK-Style support for VSSDK-based extension projects&lt;/a&gt; is now officially in Visual Studio 18.5 — classic VSIX extension projects can ditch the old MPF-style &lt;code&gt;.csproj&lt;/code&gt; format.&lt;/p&gt;
&lt;h2 id="what-changes-in-the-project-file"&gt;What changes in the project file&lt;/h2&gt;
&lt;p&gt;The biggest visible change is how much smaller the project file gets. A typical VSSDK extension now looks like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;Project&lt;/span&gt; &lt;span class="na"&gt;Sdk=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Microsoft.NET.Sdk&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;PropertyGroup&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;TargetFramework&amp;gt;&lt;/span&gt;net472&lt;span class="nt"&gt;&amp;lt;/TargetFramework&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;VSSDKBuildToolsAutoSetup&amp;gt;&lt;/span&gt;true&lt;span class="nt"&gt;&amp;lt;/VSSDKBuildToolsAutoSetup&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;VsixDeployOnDebug&amp;gt;&lt;/span&gt;true&lt;span class="nt"&gt;&amp;lt;/VsixDeployOnDebug&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;GeneratePkgDefFile&amp;gt;&lt;/span&gt;true&lt;span class="nt"&gt;&amp;lt;/GeneratePkgDefFile&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;ItemGroup&amp;gt;&amp;lt;ProjectCapability&lt;/span&gt; &lt;span class="na"&gt;Include=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;CreateVsixContainer&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&amp;lt;/ItemGroup&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;ItemGroup&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;PackageReference&lt;/span&gt; &lt;span class="na"&gt;Include=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Microsoft.VisualStudio.SDK&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Version=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;17.14.40265&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;ExcludeAssets=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;runtime&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;PackageReference&lt;/span&gt; &lt;span class="na"&gt;Include=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Microsoft.VSSDK.BuildTools&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Version=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;18.5.38461&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/ItemGroup&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/Project&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;VSSDKBuildToolsAutoSetup=true&lt;/code&gt; applies sensible defaults: &lt;code&gt;CreateVsixContainer=true&lt;/code&gt; and legacy &lt;code&gt;DeployExtension=false&lt;/code&gt;. That single property replaces a significant chunk of what previously had to be spelled out explicitly.&lt;/p&gt;
&lt;h2 id="build-time-improvements"&gt;Build time improvements&lt;/h2&gt;
&lt;p&gt;Fast Up-To-Date Check and incremental build support are included. For large solutions with small changes, this translates to &lt;strong&gt;up to 75% build time reduction&lt;/strong&gt; — meaningful if you&amp;rsquo;re iterating on an extension inside a large host solution.&lt;/p&gt;
&lt;h2 id="new-projects-vs-existing"&gt;New projects vs existing&lt;/h2&gt;
&lt;p&gt;New extension projects created in 18.5 automatically use SDK-style. Existing MPF-style extensions keep working — migration is opt-in. One thing to watch during migration: add &lt;code&gt;&amp;lt;UseWpf&amp;gt;true&amp;lt;/UseWpf&amp;gt;&lt;/code&gt; if your extension uses XAML. You also need to mark the extension as deployable in your &lt;code&gt;.sln&lt;/code&gt; or &lt;code&gt;.slnx&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;The vsixmanifest designer is replaced by the XML editor as the default — right-click → Open With if you want the old designer back.&lt;/p&gt;
&lt;h2 id="agentic-migration-path"&gt;Agentic migration path&lt;/h2&gt;
&lt;p&gt;The Modernize agent in &lt;a href="https://github.com/microsoft/vs-agent-plugins"&gt;vs-agent-plugins&lt;/a&gt; can automate the migration. Several real extensions have already been converted this way: Mads Kristensen&amp;rsquo;s Smart Screen, Command Explorer, Postfix Templates, and Whitespace Visualizer.&lt;/p&gt;
&lt;h2 id="worth-noting"&gt;Worth noting&lt;/h2&gt;
&lt;p&gt;VisualStudio.Extensibility (the newer extensibility framework) already supported SDK-style. This update brings parity to the classic VSSDK path. The only requirement is the Visual Studio extension development workload.&lt;/p&gt;
&lt;p&gt;Full details in the &lt;a href="https://devblogs.microsoft.com/visualstudio/sdk-style-support-for-extension-projects/"&gt;official post&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Bookmark Studio Brings Slot-Based Navigation and Sharing to Visual Studio Bookmarks</title><link>https://thedotnetblog.com/news/emiliano-montesdeoca/bookmark-studio-visual-studio-extension/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/news/emiliano-montesdeoca/bookmark-studio-visual-studio-extension/</guid><description>Mads Kristensen's new Bookmark Studio extension adds keyboard-driven slot navigation, a bookmark manager, colors, labels, and export/share capabilities to Visual Studio bookmarks.</description><content:encoded>&lt;p&gt;Bookmarks in Visual Studio have always been&amp;hellip; fine. You set one, you navigate to the next, you forget which bookmark is which. They work, but they&amp;rsquo;ve never been the kind of feature you&amp;rsquo;d call powerful.&lt;/p&gt;
&lt;p&gt;Mads Kristensen just &lt;a href="https://devblogs.microsoft.com/visualstudio/bookmark-studio-evolving-bookmarks-in-visual-studio/"&gt;released Bookmark Studio&lt;/a&gt;, an experimental extension that fills in exactly the gaps you&amp;rsquo;ve probably run into if you use bookmarks regularly.&lt;/p&gt;
&lt;h2 id="slot-based-navigation"&gt;Slot-based navigation&lt;/h2&gt;
&lt;p&gt;The core addition: bookmarks can now be assigned to slots 1–9 and jumped to directly with &lt;code&gt;Alt+Shift+1&lt;/code&gt; through &lt;code&gt;Alt+Shift+9&lt;/code&gt;. New bookmarks automatically get the next available slot, so in most cases, fast navigation works without any setup.&lt;/p&gt;
&lt;p&gt;This sounds simple, but it changes bookmarks from &amp;ldquo;I have some bookmarks somewhere&amp;rdquo; to &amp;ldquo;Slot 3 is my API controller, Slot 5 is the service layer, Slot 7 is the test.&amp;rdquo; That kind of spatial memory makes navigation nearly instant during focused work sessions.&lt;/p&gt;
&lt;h2 id="the-bookmark-manager"&gt;The Bookmark Manager&lt;/h2&gt;
&lt;p&gt;A new tool window shows all your bookmarks in one place with filtering by name, file, location, color, or slot. Double-click or keyboard-navigate to jump to any bookmark.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve ever had more than five or six bookmarks and lost track of which was which, this alone is worth installing the extension.&lt;/p&gt;
&lt;h2 id="organization-with-labels-colors-and-folders"&gt;Organization with labels, colors, and folders&lt;/h2&gt;
&lt;p&gt;Bookmarks can optionally have labels, colors, and be grouped into folders. None of it is required — your current bookmark workflow keeps working. But when you&amp;rsquo;re debugging a complex issue or exploring an unfamiliar codebase, being able to color-code and label your bookmarks adds useful context.&lt;/p&gt;
&lt;p&gt;All metadata is stored per solution, so your bookmark organization persists across sessions.&lt;/p&gt;
&lt;h2 id="export-and-share"&gt;Export and share&lt;/h2&gt;
&lt;p&gt;This is the feature I didn&amp;rsquo;t know I wanted. Bookmark Studio lets you export bookmarks as plain text, Markdown, or CSV. That means you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Include bookmark paths in pull request descriptions&lt;/li&gt;
&lt;li&gt;Share investigation breadcrumbs with teammates&lt;/li&gt;
&lt;li&gt;Move bookmark sets between repos or branches&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bookmarks stop being a solo navigation tool and start being a way to communicate &amp;ldquo;here&amp;rsquo;s the path through this code.&amp;rdquo;&lt;/p&gt;
&lt;h2 id="bookmarks-that-track-code-movement"&gt;Bookmarks that track code movement&lt;/h2&gt;
&lt;p&gt;Bookmark Studio tracks bookmarks relative to the text they&amp;rsquo;re anchored to, so they don&amp;rsquo;t drift to wrong lines as you edit. If you&amp;rsquo;ve ever set bookmarks during a debugging session and had them all point to the wrong lines after a refactor — this fixes that.&lt;/p&gt;
&lt;h2 id="wrapping-up"&gt;Wrapping up&lt;/h2&gt;
&lt;p&gt;Bookmark Studio doesn&amp;rsquo;t reinvent anything. It takes a feature that&amp;rsquo;s been &amp;ldquo;good enough&amp;rdquo; for years and makes it genuinely useful for focused development. Slot navigation, the Bookmark Manager, and export capabilities are the highlights.&lt;/p&gt;
&lt;p&gt;Grab it from the &lt;a href="https://marketplace.visualstudio.com/items?itemName=MadsKristensen.BookmarkStudio"&gt;Visual Studio Marketplace&lt;/a&gt; and give it a try.&lt;/p&gt;</content:encoded></item></channel></rss>