{"id":256203,"date":"2026-04-29T07:00:36","date_gmt":"2026-04-29T14:00:36","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/visualstudio\/?p=256203"},"modified":"2026-04-27T15:59:34","modified_gmt":"2026-04-27T22:59:34","slug":"sdk-style-support-for-extension-projects","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/visualstudio\/sdk-style-support-for-extension-projects\/","title":{"rendered":"SDK-Style Support for Extension Projects"},"content":{"rendered":"<p>Starting in <strong>Visual Studio 18.5<\/strong>, you can create and build Visual Studio extensions (VSIX) using an officially supported SDK-style project. This brings VSIX projects into the modern build and deployment pipeline, improving incremental build performance and making the build \u2192 deploy \u2192 debug workflow more reliable. Install the <strong>Visual Studio extension development<\/strong> workload to get the templates and tooling<strong> and try it out for yourself!<\/strong><\/p>\n<p><strong>Note:<\/strong> Extensions written using the modern VisualStudio.Extensibility framework already supports SDK-style projects today. This update extends the same SDK-style experience to <strong>VSSDK-based<\/strong> Visual Studio extensions.<\/p>\n<h3>\u00a0What We Are Adding:<\/h3>\n<ul>\n<li>Official SDK-style support for projects that produce VSSDK-based extensions.<\/li>\n<li>Build time reductions of up to 75%! We\u2019ve added end-to-end incremental build support including <a href=\"https:\/\/github.com\/dotnet\/project-system\/blob\/main\/docs\/up-to-date-check.md\">Fast Up To Date Check<\/a> and up to date deployment logic. Through internal adoption, we see a reduction of up to 75% in build time in large solutions for small changes or changes confined to a single sub project.<\/li>\n<li>Updated in-box templates: SDK-style by default, with the familiar project items (tool windows, classifiers, commands, etc.).<\/li>\n<\/ul>\n<h3>Project Usage<\/h3>\n<p>Creating a project is done the same way you are used to, using the \u201cVSIX Project\u201d or \u201cEmpty VSIX Project\u201d template:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/04\/new-vsix-project-template.webp\"><img decoding=\"async\" class=\"alignnone size-full wp-image-256206\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/04\/new-vsix-project-template.webp\" alt=\"new vsix project template image\" width=\"1103\" height=\"480\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/04\/new-vsix-project-template.webp 1103w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/04\/new-vsix-project-template-300x131.webp 300w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/04\/new-vsix-project-template-1024x446.webp 1024w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/04\/new-vsix-project-template-768x334.webp 768w\" sizes=\"(max-width: 1103px) 100vw, 1103px\" \/><\/a><\/p>\n<p>This will yield a much more compact csproj than before: only 20 lines:<\/p>\n<pre class=\"prettyprint language-xml\"><code class=\"language-xml\">&lt;Project Sdk=\"Microsoft.NET.Sdk\"&gt;\r\n\r\n  &lt;PropertyGroup&gt;\r\n    &lt;TargetFramework&gt;net472&lt;\/TargetFramework&gt;\r\n    &lt;Nullable&gt;enable&lt;\/Nullable&gt;\r\n    &lt;LangVersion&gt;14&lt;\/LangVersion&gt;\r\n\r\n    &lt;!-- VSIX settings --&gt;\r\n    &lt;VSSDKBuildToolsAutoSetup&gt;true&lt;\/VSSDKBuildToolsAutoSetup&gt;\r\n    &lt;VsixDeployOnDebug&gt;true&lt;\/VsixDeployOnDebug&gt;\r\n    &lt;GeneratePkgDefFile&gt;true&lt;\/GeneratePkgDefFile&gt;\r\n  &lt;\/PropertyGroup&gt;\r\n  &lt;ItemGroup&gt;\r\n    &lt;ProjectCapability Include=\"CreateVsixContainer\" \/&gt;\r\n  &lt;\/ItemGroup&gt;\r\n\r\n  &lt;ItemGroup&gt;\r\n    &lt;PackageReference Include=\"Microsoft.VisualStudio.SDK\" Version=\"17.14.40265\" ExcludeAssets=\"runtime\" \/&gt;\r\n    &lt;PackageReference Include=\"Microsoft.VSSDK.BuildTools\" Version=\"18.5.38461\" \/&gt;\r\n  &lt;\/ItemGroup&gt;\r\n&lt;\/Project&gt;\r\n<\/code><\/pre>\n<h2>Does it impact my extension?<\/h2>\n<ul>\n<li>If you create a new extension, you will automatically get full SDK-Style support.<\/li>\n<li>Your existing MPF style extension will continue to work should you choose not to migrate. This update adds an <em>official<\/em> SDK-style option; it doesn\u2019t force a conversion.<\/li>\n<li>You can update your project to an SDK-style project file to take advantage of these features.<\/li>\n<li>Vsixmanifest files included in SDK-style projects now open by default in the XML editor. The old designer is still available through the &#8216;Open With&#8217; menu.<\/li>\n<\/ul>\n<h2>Migration In Brief<\/h2>\n<ul>\n<li>I migrated an extension from Mads Kristensen as an example: <a href=\"https:\/\/github.com\/madskristensen\/SelectedWhitespace\/pull\/6\/files\">Convert to SDK-style project by matthew-j-clark \u00b7 Pull Request #6 \u00b7 madskristensen\/SelectedWhitespace \u00b7 GitHub<\/a><\/li>\n<li>If you have any XAML, you need to add: `&lt;UseWpf&gt;true&lt;\/UseWpf&gt;`to your csproj.<\/li>\n<li>You must mark your extension as deployable in your SLN or SLNX file if you want it to deploy when you hit F5.\n<ul>\n<li>You can do this in your SLNX like this:\n<pre class=\"prettyprint language-xml\"><code class=\"language-xml\">\u00a0&lt;Project Path=\"src\/SelectedWhitespace.csproj\"&gt;\r\n\u00a0 \u00a0 &lt;Deploy Solution=\"Debug|Any CPU\" \/&gt;\r\n\u00a0 &lt;\/Project&gt;<\/code><\/pre>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>When available, you can do this in the project configuration:\n<a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/04\/configuration-manager.webp\"><img decoding=\"async\" class=\"alignnone size-full wp-image-256204\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/04\/configuration-manager.webp\" alt=\"configuration manager image\" width=\"902\" height=\"344\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/04\/configuration-manager.webp 902w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/04\/configuration-manager-300x114.webp 300w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/04\/configuration-manager-768x293.webp 768w\" sizes=\"(max-width: 902px) 100vw, 902px\" \/><\/a><\/li>\n<\/ul>\n<ul>\n<li><code>&lt;VSSDKBuildToolsAutoSetup&gt;true&lt;\/VSSDKBuildToolsAutoSetup&gt;<\/code> will setup most sensible defaults for you and reduce the size of your csproj. This will setup options like <code>CreateVsixContainer<\/code> as true, and the legacy <code>DeployExtension<\/code> to false.<\/li>\n<li><code>&lt;VsixDeployOnDebug&gt;true&lt;\/VsixDeployOnDebug&gt;<\/code> Should be added to your csproj if you will add it to other solution files to ensure the deploy checkbox is set automatically.<\/li>\n<\/ul>\n<h2>Agentic conversion<\/h2>\n<p>We\u2019re experimenting with ways of making this as easy as possible for you. To that end, we\u2019ve added an agent skill to the <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-dotnettools.upgradeassistant\">vs-agent-plugins<\/a> repository you can use in conjunction with the Modernize agent. Let us know whether this workflow is helpful, or if you have a different agentic workflow in mind for extension development.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/04\/modernize-agent.webp\"><img decoding=\"async\" class=\"alignnone size-full wp-image-256205\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/04\/modernize-agent.webp\" alt=\"modernize agent image\" width=\"409\" height=\"100\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/04\/modernize-agent.webp 409w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/04\/modernize-agent-300x73.webp 300w\" sizes=\"(max-width: 409px) 100vw, 409px\" \/><\/a><\/p>\n<h2>Reference projects<\/h2>\n<p>Here are a few extensions that are already converted, so you can use them as references.<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/madskristensen\/StartScreen\">Smart Screen<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/madskristensen\/CommandTableInfo\">Command Explorer<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/madskristensen\/PostfixTemplates\">Postfix Templates<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/madskristensen\/SelectedWhitespace\/\">Whitespace Visualizer<\/a><\/li>\n<\/ul>\n<h2>We want to hear from you!<\/h2>\n<p>Please send us feedback and issues you encounter in <a href=\"https:\/\/developercommunity.visualstudio.com\/home\">Developer Community<\/a>. Thank you, and happy extending!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Starting in Visual Studio 18.5, you can create and build Visual Studio extensions (VSIX) using an officially supported SDK-style project. This brings VSIX projects into the modern build and deployment pipeline, improving incremental build performance and making the build \u2192 deploy \u2192 debug workflow more reliable. Install the Visual Studio extension development workload to get [&hellip;]<\/p>\n","protected":false},"author":212654,"featured_media":256206,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1388,155],"tags":[294,6978],"class_list":["post-256203","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-extensibility","category-visual-studio","tag-extensions","tag-vssdk"],"acf":[],"blog_post_summary":"<p>Starting in Visual Studio 18.5, you can create and build Visual Studio extensions (VSIX) using an officially supported SDK-style project. This brings VSIX projects into the modern build and deployment pipeline, improving incremental build performance and making the build \u2192 deploy \u2192 debug workflow more reliable. Install the Visual Studio extension development workload to get [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/posts\/256203","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/users\/212654"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/comments?post=256203"}],"version-history":[{"count":1,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/posts\/256203\/revisions"}],"predecessor-version":[{"id":256211,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/posts\/256203\/revisions\/256211"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/media\/256206"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/media?parent=256203"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/categories?post=256203"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/tags?post=256203"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}