다음을 통해 공유


Visual Studio 확장에서 첫 번째 앱을 만듭니다.

이 문서는 VisualStudio.Extensibility를 사용하여 첫 번째 확장을 만드는 방법을 보여 주는 빠른 시작입니다. 확장은 Out-of-process로 실행되며, 이는 Visual Studio 프로세스 외부에서 의미합니다.

필수 조건

  • Visual Studio 2022 버전 17.9 미리 보기 1 이상(워크로드 포함 Visual Studio extension development ).

확장 프로젝트를 만듭니다

  • 템플릿을 사용하여 VisualStudio.Extensibility Project 새 확장성 프로젝트를 만듭니다.

Screenshot of the VSExtensibility template.

이제 확장에 명령 및 편집기 구성 요소를 추가하여 Visual Studio 확장을 시작할 준비가 되었습니다.

확장 클래스

템플릿은 확장되는 클래스를 만듭니다 Extension. 이 클래스는 확장이 로드될 때 인스턴스화되는 첫 번째 클래스입니다. 이 InitializeServices 메서드에서는 서비스 컬렉션에 고유한 서비스를 추가하여 종속성 주입에 사용할 수 있도록 할 수 있습니다.

[VisualStudioContribution]
internal class ExtensionEntrypoint : Extension
{
    protected override void InitializeServices(IServiceCollection serviceCollection)
    {
        base.InitializeServices(serviceCollection);

        // You can configure dependency injection here by adding services to the serviceCollection.
    }
}

Visual Studio에서 VisualStudioContribution 사용하려는 확장 구성 요소를 표시하는 데 사용되는 특성을 확인할 수도 있습니다. 이 특성은 구현하는 형식의 정적 속성을 구현하는 IVisualStudioContributionClass 클래스에 적용할 수 있습니다 IVisualStudioContributionProperty.

첫 번째 명령 추가

템플릿은 시작점으로 사용할 수 있는 첫 번째 명령 처리기로 만듭니다 Command1.cs . Visual Studio에서 이 명령을 인식하고 클래스가 Command 구현 IVisualStudioContributionClass하도록 하려면 명령이 특성으로 VisualStudioContribution 표시됩니다.

[VisualStudioContribution]
internal class Command1 : Command
{

명령에는 Extensions 메뉴 아래에 표시 이름, 아이콘 및 배치를 정의하는 CommandConfiguration 구성 속성이 있습니다.

    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 },
    };

구성 속성은 확장을 빌드할 때 C# 컴파일러에 의해 평가되고 해당 값은 확장 메타데이터로 저장되므로 Visual Studio에서 확장 어셈블리를 로드하지 않고 읽을 수 있습니다. 이러한 이유로 구성 속성에는 일반 속성에 비해 추가 제한 사항이 있습니다(예: 읽기 전용이어야 합니다).

이 문자열을 지역화할 수 있도록 .vsextension/string-resources.json 파일의 MyExtension.Command1.DisplayName 문자열을 참조하는 명령의 표시 이름이 "%MyExtension.Command1.DisplayName%"이 있음을 확인할 수 있습니다.

명령이 실행되면 Visual Studio에서 중단점을 배치할 수 있는 메서드를 ExecuteCommandAsync 호출합니다. context 인수 또는 this.Extensibility 개체를 활용하여 Visual Studio와 상호 작용할 수 있습니다.

예를 들어 명령 처리기는 다음과 같습니다.

public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
    await context.ShowPromptAsync(
        "Hello from an extension!", 
        PromptOptions.OK, 
        cancellationToken);
}

명령을 추가하는 방법에 대한 자세한 내용은 명령 섹션을 참조하세요.

확장 디버그

  1. Visual Studio에서 확장 프로젝트가 시작 프로젝트로 선택되어 있는지 확인하고 F5 키를 눌러 디버깅을 시작합니다.

  2. 키를 누르면 F5 확장이 빌드되고 사용 중인 Visual Studio 버전의 실험적 인스턴스에 배포됩니다. 확장이 로드되면 디버거가 연결되어야 합니다.

  3. 다음 이미지와 같이 메뉴에서 새 명령을 Extensions 찾을 수 있습니다.

    Screenshot showing sample command.

다음 단계

소개 개요를 놓친 경우 VisualStudio.Extensibility 설명서에 오신 것 환영합니다 를 참조하세요.

이제 약간 더 흥미로운 확장을 만듭니다. 간단한 확장 만들기를 참조하세요.