Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten dokument to krótki przewodnik pokazujący, jak utworzyć pierwsze rozszerzenie za pomocą VisualStudio.Extensibility. Rozszerzenie działa poza procesem, czyli poza procesem programu Visual Studio.
Prerequisites
- zaleca się program Visual Studio 2026 w wersji 18.11 lub nowszej z obciążeniem Programowanie rozszerzeń Visual Studio. W przypadku wcześniejszych wersji rozszerzenie VisualStudio.Extensibility wymaga Visual Studio 2022 w wersji 17.9 lub nowszej.
Tworzenie projektu rozszerzenia
Visual Studio 18.11 lub nowszy (zalecane)
Użyj szablonu Modern VSIX Project i wybierz pozycję VisualStudio.Extensibility (Out-Of-Process) w obszarze Typ rozszerzenia. Szablon domyślnie używa VSSDK, dlatego wybierz opcję poza procesem w tym przewodniku Szybki start.
Postępuj zgodnie z krokami kreatora i opcjami zestawu SDK projektu opisanymi w artykule Tworzenie rozszerzenia przy użyciu szablonu projektu Modern VSIX.
Wcześniejsze wersje Visual Studio
Użyj szablonu VisualStudio.Extensibility Project, aby utworzyć nowy projekt rozszerzalności.
Na tym etapie możesz rozpocząć rozszerzanie Visual Studio przez dodanie poleceń i składników edytora do rozszerzenia.
Klasa rozszerzenia
Szablon tworzy klasę, która rozszerza klasę Extension ↗ . Ta klasa jest pierwszą klasą instancjonowaną podczas ładowania Twojego rozszerzenia. W metodzie InitializeServices ↗ można dodać własne usługi do kolekcji usług, aby udostępnić je do wstrzykiwania zależności.
[VisualStudioContribution]
internal class ExtensionEntrypoint : Extension
{
public override ExtensionConfiguration ExtensionConfiguration => new()
{
Metadata = new(
id: "MyExtension.abc123",
version: this.ExtensionAssemblyVersion,
publisherName: "My Company",
displayName: "My Extension"),
};
protected override void InitializeServices(IServiceCollection serviceCollection)
{
base.InitializeServices(serviceCollection);
// You can configure dependency injection here by adding services to the serviceCollection.
}
}
Można również zobaczyć VisualStudioContribution ↗ atrybut używany do oznaczania składników rozszerzeń, które mają być używane przez Visual Studio. Ten atrybut można zastosować do klas implementujących IVisualStudioContributionClass ↗ lub statycznych właściwości typu implementującego IVisualStudioContributionProperty ↗.
Dodaj pierwsze polecenie
Szablon tworzy Command1.cs jako pierwszy program obsługi poleceń, którego można użyć jako punktu wyjścia. Ponieważ chcemy poinformować Visual Studio o tym poleceniu, a klasa Command ↗ implementuje interfejs IVisualStudioContributionClass ↗, polecenie jest oznaczone atrybutem VisualStudioContribution.
[VisualStudioContribution]
internal class Command1 : Command
{
Polecenie ma właściwość konfiguracji o nazwie CommandConfiguration ↗ , która definiuje jego nazwę wyświetlaną, ikonę i położenie w Extensions menu.
public override CommandConfiguration CommandConfiguration => new("%MyExtension.Command1.DisplayName%")
{
// Use this object initializer to set optional parameters for the command. The required parameter,
// displayName, is set above. DisplayName is localized and references an entry in .vsextension\string-resources.json.
Icon = new(ImageMoniker.KnownValues.Extension, IconSettings.IconAndText),
Placements = new[] { CommandPlacement.KnownPlacements.ExtensionsMenu },
};
Właściwości konfiguracji są przetwarzane przez kompilator języka C# podczas kompilowania rozszerzenia, a ich wartości są zapisywane jako metadane rozszerzenia, dzięki czemu program Visual Studio może je odczytać bez konieczności ładowania zestawu rozszerzenia. Z tego powodu właściwości konfiguracji mają dodatkowe ograniczenia w porównaniu z normalnymi właściwościami (na przykład muszą być tylko do odczytu).
Można zauważyć, że wyświetlana nazwa polecenia to "%MyExtension.Command1.DisplayName%", które odwołuje się do ciągu MyExtension.Command1.DisplayName w pliku .vsextension/string-resources.json, co umożliwia lokalizację tego ciągu.
Po wykonaniu polecenia Visual Studio wywołuje metodę ExecuteCommandAsync ↗, w której można umieścić punkt przerwania. Możesz użyć argumentu context lub this.Extensibility, aby wchodzić w interakcję z Visual Studio.
Na przykład procedura obsługi poleceń może być następująca:
public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
await this.Extensibility.Shell().ShowPromptAsync(
"Hello from an extension!",
PromptOptions.OK,
cancellationToken);
}
Aby uzyskać więcej informacji na temat dodawania poleceń, zobacz sekcję Polecenia .
Debugowanie rozszerzenia
Upewnij się, że projekt rozszerzenia został wybrany jako projekt startowy w Visual Studio, a następnie naciśnij
F5, aby rozpocząć debugowanie.Naciśnięcie klawisza
F5kompiluje rozszerzenie i wdraża je w eksperymentalnym wystąpieniu używanej wersji Visual Studio. Debuger powinien zostać dołączony po załadowaniu rozszerzenia.Nowe polecenie można znaleźć w
Extensionsmenu, jak pokazano na poniższej ilustracji:
Następne kroki
- Dodaj polecenie — najbardziej typowa pierwsza funkcja do stworzenia
- Okna narzędzi — dodawanie niestandardowych paneli interfejsu użytkownika
- Anatomia rozszerzenia — zrozumienie struktury projektu i kluczowych pojęć
- Przeglądaj wszystkie przykłady ↗ — w pełni działające rozszerzenia na GitHubie