Skip to content

Commit 47e585d

Browse files
authored
Merge pull request #1 from maiak/dev/bertaygu/inproc
Update in-proc documentation
2 parents 0c9692c + afbad40 commit 47e585d

File tree

2 files changed

+74
-9
lines changed

2 files changed

+74
-9
lines changed

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

Lines changed: 73 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,29 @@ 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 the 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](https://learn.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.extensibility.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 the VisualStudio.Extensibility SDK, you can refer to [these tips](#add-a-visualstudioextensibility-extension-to-an-existing-vssdk-extension-project) to host both a VSSDK extension and a VisualStudio.Extensibility extension 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

25-
* Visual Studio 2022.6 Preview 1 or higher with `.Net desktop development` workload.
26-
* Install [VisualStudio.Extensibility Project System](https://marketplace.visualstudio.com/items?itemName=vsext.gladstone): This extension contains project templates for VisualStudio.Extensibility extensions.
27-
* If you're updating from earlier builds, make sure to update VisualStudio.Extensibility Project System to latest version as there are breaking changes in VisualStudio.Extensibility packages.
34+
* Visual Studio 2022.9 Preview 1 or higher with the `Visual Studio extension development` workload.
35+
* If you're updating from earlier builds, make sure to uninstall VisualStudio.Extensibility Project System to avoid potential conflicts.
2836

2937
## Create the extension project
3038

@@ -112,3 +120,60 @@ internal class MyExtension : Extension
112120

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