Skip to content

Commit 9723d23

Browse files
authored
Update in-proc documentation
1 parent 0c9692c commit 9723d23

File tree

2 files changed

+72
-6
lines changed

2 files changed

+72
-6
lines changed

docs/extensibility/visualstudio.extensibility/get-started/in-proc-extensions.md

Lines changed: 71 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,24 @@ manager: jmartens
1010
ms.technology: vs-ide-sdk
1111
---
1212

13-
# Create your first VSSDK-compatible VisualStudio.Extensibility extension
13+
# Using VisualStudio.Extensibility SDK and VSSDK together
1414

15-
While the VisualStudio.Extensibility model was created primarily to host extensions outside of the devenv.exe process, starting with Visual Studio 2022 17.4 Preview 1 it's possible to build a VisualStudio.Extensibility extension that's hosted within devenv.exe and can use traditional extensibility APIs provided by the [Microsoft.VisualStudio.Sdk](https://www.nuget.org/packages/Microsoft.VisualStudio.Sdk) packages.
15+
While the VisualStudio.Extensibility model was created primarily to host extensions outside of the devenv.exe process, it is possible to use VisualStudio.Extensibility SDK APIs in an extension running in Visual Studio process and utilizing traditional extensibility APIs provided by the [Microsoft.VisualStudio.Sdk](https://www.nuget.org/packages/Microsoft.VisualStudio.Sdk) packages.
16+
17+
The support of *in-proc* usage is meant to allow early adopters to the new VisualStudio.Extensibility APIs while relying on [Microsoft.VisualStudio.Sdk](https://www.nuget.org/packages/Microsoft.VisualStudio.Sdk) to cover any feature gap.
18+
19+
This document is a quick walkthrough on different options to utilize VisualStudio.Extensibility SDK in-proc.
20+
21+
* If you are developing a new extension, our recommended method is to create a VisualStudio.Extension that is hosted in-process following [this tutorial](#create-your-first-vssdk-compatible-visualstudioextensibility-extension). This will allow you to use full capabilities of VisualStudio.Extensibility SDK in addition to being able to inject VSSDK and MEF services.
1622

17-
The support of *in-proc* extensions is meant to allow early adopters to the new VisualStudio.Extensibility APIs while relying on [Microsoft.VisualStudio.Sdk](https://www.nuget.org/packages/Microsoft.VisualStudio.Sdk) to cover any feature gap.
23+
* If you have an existing VSSDK extension, you can follow [these tips](#use-visualstudioextensibility-apis-from-existing-vssdk-extensions) to use the new `VisualStudioExtensibility` instance in your extension.
1824

19-
At this time, VSIX extensions containing VisualStudio.Extensibility references can't be uploaded to the Visual Studio Marketplace due to VisualStudio.Extensibility being in preview status.
25+
* If you want to add commands, debug visualizers, tool windows to your existing VSSDK extension by using VisualStudio.Extensibility SDK, you can refer to [these tips](#using-visualstudioextensibility-sdk-and-vssdk-together) to host both a VSSDK extension and VisualStudio.Extensibility SDK in the same VS extension project.
26+
27+
# Create your first VSSDK-compatible VisualStudio.Extensibility extension
28+
29+
While the VisualStudio.Extensibility model was created primarily to host extensions outside of the devenv.exe process, starting with Visual Studio 2022 17.4 Preview 1 it's possible to build a VisualStudio.Extensibility extension that's hosted within devenv.exe and can use traditional extensibility APIs provided by the [Microsoft.VisualStudio.Sdk](https://www.nuget.org/packages/Microsoft.VisualStudio.Sdk) packages.
2030

21-
This document is a quick walkthrough on how to create your first VS-SDK-compatible extension using the VisualStudio.Extensibility model.
2231

2332
## Prerequisites
2433

@@ -112,3 +121,60 @@ internal class MyExtension : Extension
112121

113122
...
114123
```
124+
125+
# Use VisualStudio.Extensibility from existing VSSDK extensions
126+
127+
For existing VSSDK extension, another option is to query for `VisualStudioExtensibility` instance via service provider and utilize its methods. This method will allow you to use new API surface area of VisualStudio.Extensibility SDK in your existing components. This can be useful in situations where you like to use the new API to query project information, document management without creating a new VisualStudio.Extensibility based extension.
128+
129+
Here is an example code snippet that shows how one can utilize `VisualStudioExtensibility` with in a VSSDK package:
130+
131+
* In your `.csproj` include a package reference to VisualStudio.Extensibility APIs:
132+
133+
```XML
134+
<ItemGroup>
135+
<PackageReference Include="Microsoft.VisualStudio.Extensibility" Version="17.9.23-preview-1" />
136+
</ItemGroup>
137+
```
138+
139+
* You can now query for `VisualStudioExtensibility` instance via `GetServiceAsync` method in your package or other components:
140+
141+
```CSharp
142+
...
143+
using Microsoft.VisualStudio.Extensibility;
144+
...
145+
146+
public class VSSDKPackage : AsyncPackage
147+
{
148+
protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress<ServiceProgressData> progress)
149+
{
150+
VisualStudioExtensibility extensibility = await this.GetServiceAsync<VisualStudioExtensibility, VisualStudioExtensibility>();
151+
await extensibility.Shell().ShowPromptAsync("Hello from in-proc", PromptOptions.OK, cancellationToken);
152+
...
153+
}
154+
}
155+
```
156+
157+
# Add VisualStudio.Extensibility extension in to an existing VSSDK extension project
158+
159+
If you also want to contribute components like tool windows, editor listeners using VisualStudio.Extensibility SDK within your existing VSSDK extension, you will have to follow additional steps to create a VisualStudio.Extensibility `Extension` instance in your project.
160+
161+
* You will need an SDK style `.csproj` in order to utilize VisualStudio.Extensibility SDK packages. For existing projects, you may need to update your `.csproj` to an SDK style one.
162+
163+
* Remove package reference for `Microsoft.VSSDK.BuildTools` and instead add package references for VisualStudio.Extensibility.
164+
165+
```XML
166+
<PackageReference Include="Microsoft.VisualStudio.Extensibility.Sdk" Version="17.9.23-preview-1" />
167+
<PackageReference Include="Microsoft.VisualStudio.Extensibility.Build" Version="17.9.23-preview-1" />
168+
```
169+
170+
* Add `VssdkCompatibleExtension` property to your project file, setting it to `true`. This will disable `vsixmanifest` generation and enable some of VSSDK features for compatibility.
171+
172+
```XML
173+
<PropertyGroup>
174+
<VssdkCompatibleExtension>true</VssdkCompatibleExtension>
175+
</PropertyGroup>
176+
```
177+
178+
* Create a new extension class inheriting from `Extension` base class and set [RequiresInProcessHosting](#requiresinprocesshosting-property) property as shown above.
179+
180+
You can now use all capabilities of VisualStudio.Extensibility together with your existing VSSDK extension.

docs/extensibility/visualstudio.extensibility/visualstudio-extensibility.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ VisualStudio.Extensibility aims to address many of the problems developers exper
2525
* Simplified architecture, consistent APIs, and clear documentation
2626
* Extensions can be installed without restarting Visual Studio
2727

28-
Eventually, you will be able to use the VisualStudio.Extensibility SDK to write any extension you could write using the VS SDK. However, until that time, you might encounter situations where the functionality you need in your extension isn't yet available in VisualStudio.Extensibility. In that case, you can develop an in-process extension by leveraging the new VisualStudio.Extensibility APIs while relying on VS SDK to cover any feature gap. To learn more, see [In-proc extensions](./get-started/in-proc-extensions.md).
28+
Eventually, you will be able to use the VisualStudio.Extensibility SDK to write any extension you could write using the VS SDK. However, until that time, you might encounter situations where the functionality you need in your extension isn't yet available in VisualStudio.Extensibility. In that case, you can use VisualStudio.Extensibility SDK together with VS SDK running in-process to cover any feature gap. To learn more, see [In-proc extensions](./get-started/in-proc-extensions.md).
2929

3030
The latest information on VisualStudio.Extensibility may be found in the VSExtensibility GitHub repo at [announcements](https://github.com/microsoft/VSExtensibility/blob/main/docs/announcements.md).
3131

0 commit comments

Comments
 (0)