Share via


Visual Studio 출력 창에 쓰기

Visual Studio IDE의 출력 창은 사용자에게 상태, 진단/로깅 또는 기타 정보 텍스트를 전달하는 데 사용할 수 있는 도구 창입니다. 메시지 상자를 표시할 수 있는 사용자 프롬프트와 달리 출력 창에 기록된 메시지는 사용자가 IDE에 출력 창을 표시하고 드롭다운 목록에서 출력 표시 목록에서 채널을 선택한 경우에만 표시됩니다. 사용자가 기본 메뉴에서 출력 보기 > 메뉴를 선택하면 출력 창이 표시됩니다.

시작하기

Important

VisualStudio.Extensibility 출력 창 API는 현재 미리 보기로 제공되며 변경될 수 있습니다. 이러한 API를 활용하는 모든 확장은 이후 버전의 Visual Studio에서 작동하지 않을 수 있으며 최신 버전의 API가 릴리스될 때 업데이트해야 합니다.

시작하려면 시작 섹션에서 프로젝트 만들기 섹션을 따릅니다.

출력 창 작업

이 가이드는 출력 창에서 수행할 수 있는 가장 일반적인 작업을 설명하도록 설계되었습니다.

출력 창 채널 가져오기

출력 창에 쓰려면 출력 창 채널을 호출 VisualStudioExtensibility.Views().Output.GetChannelAsync()하여 만들 수 있어야 합니다.

OutputWindowExtensibility.GetChannelAsync()

GetChannelAsync() 메서드는 다음 세 개의 매개 변수를 사용합니다.

매개 변수 Type 필수 설명
identifier string 채널 고유 식별자입니다.
displayNameResourceId string 출력 창의 표시 이름을 포함하는 리소스 의 이름입니다. 출력 창의 "출력 표시:" 드롭다운 메뉴에 표시됩니다.

예를 들어 "OutputWindowDisplayName"이라는 .resx 리소스로 호출 MyStrings.resx 된 리소스 파일이 있는 경우 nameof(MyStrings.OutputWindowDisplayName) 이 매개 변수에 사용합니다.
cancellationToken CancellationToken 비동기 작업에 대한 CancellationToken 입니다.

이름 리소스 ID 요구 사항 표시

현재 버전의 출력 창 API를 사용하려면 출력 창 채널의 표시 이름을 리소스 파일에 저장해야 합니다:

  • .resx 파일 (샘플)을 추가하고 프로젝트의 ResXFileCodeGenerator(샘플)로 구성되었는지 확인합니다.
  • 확장 클래스가 아직 없는 경우 프로젝트에 확장 클래스 추가(샘플)
  • Extension 클래스에서 속성을 재정의 ResourceManager 하여 .resx 파일에 해당하는 ResourceManager를 반환합니다.

.resx 리소스 파일 편집

Visual Studio에서 사용할 수 있는 디자이너 UI를 사용하여 리소스 파일(이 경우 MyStrings.resx)을 편집할 수 있습니다.

resx Designer

또는 원시 XML을 편집하여 리소스 파일을 편집하여 다음 코드 조각을 추가할 수 있습니다.

  <data name="OutputWindowDisplayName" xml:space="preserve">
    <value>My Output window</value>
  </data>

.csproj 프로젝트 파일을 편집합니다.

.csproj 프로젝트 파일에 다음을 추가합니다 (IDE를 통해 .resx 파일을 추가한 경우 이미 있을 수 있음).

  <ItemGroup>
    <Compile Update="MyStrings.Designer.cs">
      <DesignTime>True</DesignTime>
      <AutoGen>True</AutoGen>
      <DependentUpon>MyStrings.resx</DependentUpon>
    </Compile>
  </ItemGroup>
  
  <ItemGroup>
    <EmbeddedResource Update="MyStrings.resx">
      <Generator>ResXFileCodeGenerator</Generator>
      <LastGenOutput>MyStrings.Designer.cs</LastGenOutput>
    </EmbeddedResource>
  </ItemGroup>

Extension 클래스 편집 또는 추가

프로젝트에 파생되는 Extension클래스가 아직 포함되어 있지 않은 경우 아래의 간단한 클래스와 같은 클래스를 추가해야 합니다(이 경우 다음과 같이 호출 MyExtension.cs).

using System.Resources;
using Microsoft.VisualStudio.Extensibility;

namespace MyProject
{
    public class MyExtension : Extension
    {
        protected override ResourceManager? ResourceManager => MyStrings.ResourceManager;
    }
}

프로젝트에 이러한 클래스가 이미 포함되어 있는 경우 속성을 설정하는 ResourceManager 줄만 추가하면 됩니다.

참고 항목

재정의 MyExtension 하지 않은 경우 클래스가 프로젝트 이름으로 기본값인 리소스 클래스와 동일한 네임스페이스에 MyStrings 있는지 확인합니다.

초기화 코드 추가하기

이 코드는 출력 메시지(예: 명령)를 표시하는 데 사용하려는 클래스에 있을 수 있지만 중요한 점은 GetChannelAsync() 지정된 출력 창 채널 ID에 대해 한 번만 호출할 수 있다는 것입니다. 따라서 일회성 초기화 메서드(예: InitializeAsync().)에서 호출하는 것이 좋습니다.

public override async Task InitializeAsync(CancellationToken cancellationToken)
{
    string id = "MyOutputWindow";
    string displayNameResourceId = nameof(MyStrings.OutputWindowDisplayName);

     // To use this Output window Channel elsewhere in the class, such as the ExecuteCommandAsync() method in a Command, save this result to a field in the class.
    OutputWindow? outputWindow = await this.Extensibility.Views().Output.GetChannelAsync(id, displayNameResourceId, cancellationToken);
}

출력 창에 쓰기

출력 가져오기 창 채널에서 가져온OutputWindow 인스턴스에는 다음과 같은 텍스트를 쓰기 위한 친숙한 작업을 지원하는 System.IO.TextWriter 속성이 Writer 있습니다.

예시

이 코드 조각은 명령의ExecuteCommandAsync() 메서드와 같이 출력 창에 메시지를 표시하려는 위치에 사용할 수 있습니다.

if (this.outputWindow != null)
{
    await this.outputWindow.Writer.WriteLineAsync("This is a test of the output window.");
}

다음 단계

자세한 정보:

샘플 코드를 살펴보세요.

  • 출력 창을 사용하는 확장을 만드는 전체 예제는 OutputWindowSample 샘플을 참조하세요.