다음을 통해 공유


이미지 서비스 및 카탈로그

이 요리 문서에는 Visual Studio 2015에 도입된 Visual Studio Image Service 및 이미지 카탈로그를 채택하기 위한 지침과 모범 사례가 포함되어 있습니다.

Visual Studio 2015에 도입된 이미지 서비스를 통해 개발자는 디바이스에 가장 적합한 이미지와 사용자가 선택한 테마를 가져와 표시되는 컨텍스트에 대한 올바른 테마를 포함하여 이미지를 표시할 수 있습니다. 이미지 서비스를 채택하면 자산 유지 관리, HDPI 크기 조정 및 테마와 관련된 주요 문제를 제거하는 데 도움이 됩니다.

오늘 문제 솔루션
배경색 혼합 기본 제공 알파 블렌딩
일부 이미지 테마 지정 테마 메타데이터
고대비 모드 대체 고대비 리소스
다른 DPI 모드에 여러 리소스 필요 벡터 기반 대체를 사용하는 선택 가능한 리소스
중복 이미지 이미지 개념당 하나의 식별자

이미지 서비스를 채택하는 이유는 무엇인가요?

  • 항상 Visual Studio에서 최신 "픽셀 완벽한" 이미지 가져오기

  • 사용자 고유의 이미지를 제출하고 사용할 수 있습니다.

  • Windows에서 새 DPI 크기 조정을 추가할 때 이미지를 테스트할 필요가 없습니다.

  • 구현에서 오래된 아키텍처 장애물 해결

    이미지 서비스를 사용하기 전과 후에 Visual Studio 셸 도구 모음:

    이미지 서비스 전후

작동 방식

이미지 서비스는 지원되는 모든 UI 프레임워크에 적합한 비트맵 이미지를 제공할 수 있습니다.

  • WPF: BitmapSource

  • WinForms: System.Drawing.Bitmap

  • Win32: HBITMAP

    이미지 서비스 흐름 다이어그램

    이미지 서비스 흐름 다이어그램

    이미지 모니커

    이미지 모니커(또는 짧은 모니커)는 이미지 라이브러리에서 이미지 자산 또는 이미지 목록 자산을 고유하게 식별하는 GUID/ID 쌍입니다.

    알려진 별명

    Visual Studio 이미지 카탈로그에 포함되고 Visual Studio 구성 요소 또는 확장에서 공개적으로 사용할 수 있는 이미지 모니커 집합입니다.

    이미지 매니페스트 파일

    이미지 매니페스트(.imagemanifest) 파일은 이미지 자산 집합, 해당 자산을 나타내는 모니커 및 각 자산을 나타내는 실제 이미지 또는 이미지를 정의하는 XML 파일입니다. 이미지 매니페스트는 레거시 UI 지원을 위해 독립 실행형 이미지 또는 이미지 목록을 정의할 수 있습니다. 또한 자산 또는 각 자산 뒤에 있는 개별 이미지에 설정하여 해당 자산이 표시되는 시기와 방법을 변경할 수 있는 특성이 있습니다.

    이미지 매니페스트 스키마

    전체 이미지 매니페스트는 다음과 같습니다.

<ImageManifest>
      <!-- zero or one Symbols elements -->
      <Symbols>
        <!-- zero or more Import, Guid, ID, or String elements -->
      </Symbols>
      <!-- zero or one Images elements -->
      <Images>
        <!-- zero or more Image elements -->
      </Images>
      <!-- zero or one ImageLists elements -->
      <ImageLists>
        <!-- zero or more ImageList elements -->
      </ImageLists>
</ImageManifest>

기호

가독성 및 유지 관리 지원으로 이미지 매니페스트는 특성 값에 기호를 사용할 수 있습니다. 기호는 다음과 같이 정의됩니다.

<Symbols>
      <Import Manifest="manifest" />
      <Guid Name="ShellCommandGuid" Value="8ee4f65d-bab4-4cde-b8e7-ac412abbda8a" />
      <ID Name="cmdidSaveAll" Value="1000" />
      <String Name="AssemblyName" Value="Microsoft.VisualStudio.Shell.UI.Internal" />
      <!-- If your assembly is strongly named, you'll need the version and public key token as well -->
      <!-- <String Name="AssemblyName" Value="Microsoft.VisualStudio.Shell.UI.Internal;v17.0.0.0;b03f5f7f11d50a3a" /> -->
</Symbols>
하위 요소 정의
Import 현재 매니페스트에서 사용할 지정된 매니페스트 파일의 기호를 가져옵니다.
가이드 기호는 GUID를 나타내며 GUID 서식과 일치해야 합니다.
아이디 기호는 ID를 나타내며 음수가 아닌 정수여야 합니다.
String 기호는 임의의 문자열 값을 나타냅니다.

기호는 대/소문자를 구분하며 $(symbol-name) 구문을 사용하여 참조됩니다.

<Image Guid="$(ShellCommandGuid)" ID="$(cmdidSaveAll)" >
      <Source Uri="/$(AssemblyName);Component/Resources/image.xaml" />
</Image>

일부 기호는 모든 매니페스트에 대해 미리 정의됩니다. 원본 또는 <Import> 요소의 Uri 특성에서 로컬 컴퓨터의 <> 경로를 참조하는 데 사용할 수 있습니다.

기호 설명
CommonProgramFiles (공용 프로그램 파일) %CommonProgramFiles% 환경 변수의 값입니다.
LocalAppData %LocalAppData% 환경 변수의 값입니다.
매니페스트폴더 매니페스트 파일이 포함된 폴더
MyDocuments 현재 사용자의 내 문서 폴더 전체 경로
ProgramFiles %ProgramFiles% 환경 변수의 값입니다.
시스템 Windows\System32 폴더
WinDir %WinDir% 환경 변수의 값입니다.

Image

<Image> 요소는 모니커에서 참조할 수 있는 이미지를 정의합니다. 함께 가져온 GUID와 ID는 이미지 모니커를 형성합니다. 이미지의 모니커는 전체 이미지 라이브러리에서 고유해야 합니다. 둘 이상의 이미지에 지정된 모니커가 있는 경우 라이브러리를 빌드하는 동안 처음 발생하는 모니커가 유지됩니다.

하나 이상의 원본을 포함해야 합니다. 크기 중립적 소스는 광범위한 크기에서 최상의 결과를 제공하지만 필수는 아닙니다. 서비스에 Image< 요소에 >정의되지 않은 크기의 이미지가 요청되고 크기 중립적 원본이 없는 경우 서비스는 최상의 크기별 원본을 선택하고 요청된 크기로 크기를 조정합니다.

<Image Guid="guid" ID="int" AllowColorInversion="true/false">
      <Source ... />
      <!-- optional additional Source elements -->
</Image>
속성 정의
가이드 [필수] 이미지 모니커의 GUID 부분입니다.
아이디 [필수] 이미지 모니커의 ID 부분입니다.
색상 반전 허용 [선택 사항, 기본값 true] 어두운 배경에서 사용할 때 이미지의 색을 프로그래밍 방식으로 반전할 수 있는지 여부를 나타냅니다.

출처

<Source> 요소는 단일 이미지 원본 자산(XAML 및 PNG)을 정의합니다.

<Source Uri="uri" Background="background">
      <!-- optional NativeResource element -->
 </Source>
속성 정의
Uri [필수] 이미지를 로드할 수 있는 위치를 정의하는 URI입니다. 다음 중 하나일 수 있습니다.

- application:/// 권한을 사용하는 팩 URI
- 절대 구성 요소 리소스 참조
- 네이티브 리소스를 포함하는 파일의 경로
배경 [선택 사항] 원본이 사용하려는 배경의 종류를 나타냅니다.

다음 중 하나일 수 있습니다.

광: 원본은 밝은 배경에서 사용할 수 있습니다.

어둠: 원본은 어두운 배경에서 사용할 수 있습니다.

HighContrast: 고대비 모드의 모든 배경에서 원본을 사용할 수 있습니다.

HighContrastLight: 고대비 모드의 밝은 배경에서 원본을 사용할 수 있습니다.

HighContrastDark: 원본은 고대비 모드의 어두운 배경에서 사용할 수 있습니다.

Background 특성을 생략하면 모든 백그라운드에서 원본을 사용할 수 있습니다.

배경이 밝게, 어둡게, HighContrastLight 또는 HighContrastDark인 경우 원본의 색은 반전되지 않습니다. Background를 생략하거나 HighContrast로 설정하면 원본 색의 반전이 이미지의 AllowColorInversion 특성에 의해 제어됩니다.

<Source> 요소에는 다음 선택적 하위 요소 중 하나만 있을 수 있습니다.

요소 특성(모두 필요) 정의
<크기> 가치 원본은 지정된 크기의 이미지(디바이스 단위)에 사용됩니다. 이미지는 정사각형입니다.
<크기 범위> MinSize, MaxSize 원본은 MinSize에서 MaxSize(디바이스 단위)에 이르는 이미지에 사용됩니다. 이미지는 정사각형입니다.
<치수> 너비, 높이 원본은 지정된 너비와 높이(디바이스 단위)의 이미지에 사용됩니다.
<차원범위> MinWidth (최소 너비), MinHeight (최소 높이)

MaxWidth, MaxHeight
원본은 최소 너비/높이에서 최대 너비/높이(디바이스 단위)에 이르는 이미지에 사용됩니다.

<Source> 요소에는 관리되는 어셈블리가 아닌 네이티브 어셈블리에서 로드되는 <Source>를 정의하는 선택적인 <NativeResource> 하위 요소가 있을 수도 있습니다.

<NativeResource Type="type" ID="int" />
속성 정의
유형 [필수] 네이티브 리소스의 형식(XAML 또는 PNG)
아이디 [필수] 네이티브 리소스의 정수 ID 부분입니다.

ImageList

<ImageList> 요소는 단일 스트립에서 반환할 수 있는 이미지 컬렉션을 정의합니다. 스트립은 필요에 따라 주문형으로 제작됩니다.

<ImageList>
      <ContainedImage Guid="guid" ID="int" External="true/false" />
      <!-- optional additional ContainedImage elements -->
 </ImageList>
속성 정의
가이드 [필수] 이미지 모니커의 GUID 부분입니다.
아이디 [필수] 이미지 모니커의 ID 부분입니다.
External [선택 사항, 기본값 false] 이미지 모니커가 현재 매니페스트의 이미지를 참조하는지 여부를 나타냅니다.

포함된 이미지의 모니커는 현재 매니페스트에 정의된 이미지를 참조할 필요가 없습니다. 이미지 라이브러리에서 포함된 이미지를 찾을 수 없는 경우 빈 자리 표시자 이미지가 해당 위치에 사용됩니다.

이미지 서비스 사용

첫 번째 단계(관리됨)

이미지 서비스를 사용하려면 프로젝트에 다음 어셈블리의 일부 또는 전부에 대한 참조를 추가해야 합니다.

  • Microsoft.VisualStudio.ImageCatalog.dll

    • 기본 제공 이미지 카탈로그 KnownMonikers를 사용하는 경우 필요합니다.
  • Microsoft.VisualStudio.Imaging.dll

    • WPF UI에서 CrispImageImageThemingUtilities 를 사용하는 경우 필요합니다.
  • Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime.dll

    • ImageMonikerImageAttributes 형식을 사용하는 경우 필수입니다.

    • EmbedInteropTypes는 true로 설정해야 합니다.

  • Microsoft.VisualStudio.Shell.Interop.14.0.DesignTime

    • IVsImageService2 형식을 사용하는 경우 필수입니다.

    • EmbedInteropTypes는 true로 설정해야 합니다.

  • Microsoft.VisualStudio.Utilities.dll

    • WPF UI에서 ImageThemingUtilities.ImageBackgroundColorBrushToColorConverter를 사용하는 경우 필요합니다.
  • Microsoft.VisualStudio.Shell.<VSVersion>.0

    • IVsUIObject 형식을 사용하는 경우 필수입니다.
  • Microsoft.VisualStudio.Shell.Interop.10.0.dll

    • WinForms 관련 UI 도우미를 사용하는 경우 필요합니다.

    • EmbedInteropTypes를 true로 설정해야 합니다.

첫 번째 단계(네이티브)

이미지 서비스를 사용하려면 프로젝트에 다음 헤더의 일부 또는 전부를 포함해야 합니다.

  • KnownImageIds.h

    • 기본 제공 이미지 카탈로그 KnownMonikers를 사용하지만 IVsHierarchy GetGuidProperty 또는 GetProperty 호출에서 값을 반환하는 경우와 같이 ImageMoniker 형식을 사용할 수 없는 경우 필수입니다.
  • KnownMonikers.h

    • 기본 제공 이미지 카탈로그 KnownMonikers를 사용하는 경우 필요합니다.
  • ImageParameters140.h

    • ImageMonikerImageAttributes 형식을 사용하는 경우 필수입니다.
  • VSShell140.h

    • IVsImageService2 형식을 사용하는 경우 필수입니다.
  • ImageThemingUtilities.h

    • 이미지 서비스가 자동으로 테마를 처리하도록 할 수 없는 경우에는 직접 설정이 필요합니다.

    • 이미지 서비스에서 이미지 테마를 처리할 수 있는 경우 이 헤더를 사용하지 마세요.

  • VsDpiAwareness.h

    • DPI 인식 도우미를 사용하여 현재 DPI를 가져오는 경우 필요합니다.

새 WPF UI를 작성하려면 어떻게 해야 하나요?

  1. 먼저 위의 첫 번째 단계 섹션에 필요한 어셈블리 참조를 프로젝트에 추가합니다. 모든 항목을 추가할 필요는 없으므로 필요한 참조만 추가합니다. (참고: 브러시 대신 을 사용하거나 액세스할 수 있는 경우 변환기가 필요하지 않으므로 유틸리티에 대한 참조를 건너뛸 수 있습니다.)

  2. 원하는 이미지를 선택하고 모니커를 가져옵니다. KnownMoniker를 사용하거나 사용자 지정 이미지 및 모니커가 있는 경우 직접 사용하세요.

  3. XAML 에 CrispImages 를 추가합니다. (아래 예제를 참조하세요.)

  4. UI 계층 구조에서 ImageThemingUtilities.ImageBackgroundColor 속성을 설정합니다. (이 설정은 배경색이 알려진 위치에서 설정해야 하며 반드시 CrispImage에서는 설정되지 않아야 합니다.) (아래 예제를 참조하세요.)

<Window
  x:Class="WpfApplication.MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:imaging="clr-namespace:Microsoft.VisualStudio.Imaging;assembly=Microsoft.VisualStudio.Imaging"
  xmlns:theming="clr-namespace:Microsoft.VisualStudio.PlatformUI;assembly=Microsoft.VisualStudio.Imaging"
  xmlns:utilities="clr-namespace:Microsoft.VisualStudio.PlatformUI;assembly=Microsoft.VisualStudio.Utilities"
  xmlns:catalog="clr-namespace:Microsoft.VisualStudio.Imaging;assembly=Microsoft.VisualStudio.ImageCatalog"
  Title="MainWindow" Height="350" Width="525" UseLayoutRounding="True">
  <Window.Resources>
    <utilities:BrushToColorConverter x:Key="BrushToColorConverter"/>
  </Window.Resources>
  <StackPanel Background="White" VerticalAlignment="Center"
    theming:ImageThemingUtilities.ImageBackgroundColor="{Binding Background, RelativeSource={RelativeSource Self}, Converter={StaticResource BrushToColorConverter}}">
    <imaging:CrispImage Width="16" Height="16" Moniker="{x:Static catalog:KnownMonikers.MoveUp}" />
  </StackPanel>
</Window>

기존 WPF UI를 업데이트하려면 어떻게 해야 하나요?

기존 WPF UI 업데이트는 다음 세 가지 기본 단계로 구성된 비교적 간단한 프로세스입니다.

  1. UI의 모든 <이미지> 요소를 CrispImage< 요소로 >바꿉다.

  2. 모든 원본 특성을 모니커 특성으로 변경합니다.

    • 이미지가 변경되지 않으며 KnownMonikers를 사용하는 경우 해당 속성을 KnownMoniker에 정적으로 바인딩합니다. (위의 예제를 참조하세요.)

    • 이미지가 변경되지 않으며 사용자 고유의 사용자 지정 이미지를 사용하는 경우 사용자 고유의 모니커에 정적으로 바인딩합니다.

    • 이미지를 변경할 수 있는 경우 속성 변경 내용을 알릴 코드 속성에 Moniker 특성을 바인딩합니다.

  3. UI 계층 구조의 어딘가에 ImageThemingUtilities.ImageBackgroundColor 를 설정하여 색 반전이 올바르게 작동하는지 확인합니다.

    • 이렇게 하려면 BrushToColorConverter 클래스를 사용해야 할 수 있습니다. (위의 예제를 참조하세요.)

Win32 UI를 업데이트하려면 어떻게 해야 하나요?

이미지의 원시 로드를 바꾸기 위해 적절한 위치에 다음을 코드에 추가합니다. 필요에 따라 HBITMAP 및 HICON 및 HIMAGELIST를 반환하기 위한 값을 전환합니다.

이미지 서비스 가져오기

CComPtr<IVsImageService2> spImgSvc;
CGlobalServiceProvider::HrQueryService(SID_SVsImageService, &spImgSvc);

이미지 요청

UINT dpiX, dpiY;
HWND hwnd = // get the HWND where the image will be displayed
VsUI::CDpiAwareness::GetDpiForWindow(hwnd, &dpiX, &dpiY);

ImageAttributes attr = { 0 };
attr.StructSize      = sizeof(attributes);
attr.Format          = DF_Win32;
// IT_Bitmap for HBITMAP, IT_Icon for HICON, IT_ImageList for HIMAGELIST
attr.ImageType       = IT_Bitmap;
attr.LogicalWidth    = 16;
attr.LogicalHeight   = 16;
attr.Dpi             = dpiX;
// Desired RGBA color, if you don't use this, don't set IAF_Background below
attr.Background      = 0xFFFFFFFF;
attr.Flags           = IAF_RequiredFlags | IAF_Background;

CComPtr<IVsUIObject> spImg;
// Replace this KnownMoniker with your desired ImageMoniker
spImgSvc->GetImage(KnownMonikers::Blank, attributes, &spImg);

WinForms UI를 업데이트하려면 어떻게 해야 하나요?

이미지의 원시 로드를 바꾸기 위해 적절한 위치에 다음을 코드에 추가합니다. 필요에 따라 비트맵과 아이콘을 반환하기 위한 값을 전환합니다.

유용한 using 구문

using GelUtilities = Microsoft.Internal.VisualStudio.PlatformUI.Utilities;

이미지 서비스 가져오기

// This or your preferred way of querying for Visual Studio services
IVsImageService2 imageService = (IVsImageService2)Package.GetGlobalService(typeof(SVsImageService));

이미지 요청

Control control = // get the control where the image will be displayed

ImageAttributes attributes = new ImageAttributes
{
    StructSize    = Marshal.SizeOf(typeof(ImageAttributes)),
    // IT_Bitmap for Bitmap, IT_Icon for Icon, IT_ImageList for ImageList
    ImageType     = (uint)_UIImageType.IT_Bitmap,
    Format        = (uint)_UIDataFormat.DF_WinForms,
    LogicalWidth  = 16,
    LogicalHeight = 16,
    Dpi           = (int)DpiAwareness.GetWindowDpi(control.Handle);
    // Desired RGBA color, if you don't use this, don't set IAF_Background below
    Background    = 0xFFFFFFFF,
    Flags         = unchecked((uint)_ImageAttributesFlags.IAF_RequiredFlags | _ImageAttributesFlags.IAF_Background),
};

// Replace this KnownMoniker with your desired ImageMoniker
IVsUIObject uIObj = imageService.GetImage(KnownMonikers.Blank, attributes);

Bitmap bitmap = (Bitmap)GelUtilities.GetObjectData(uiObj); // Use this if you need a bitmap
// Icon icon = (Icon)GelUtilities.GetObjectData(uiObj);    // Use this if you need an icon

새 도구 창에서 이미지 모니커를 사용하려면 어떻게 해야 하나요?

VSIX 패키지 프로젝트 템플릿이 Visual Studio 2015용으로 업데이트되었습니다. 새 도구 창을 만들려면 VSIX 프로젝트를 마우스 오른쪽 단추로 클릭하고새 항목>(Ctrl+Shift+A)를 선택합니다. 프로젝트 언어의 확장성 노드 아래에서 사용자 지정 도구 창을 선택하고 도구 창에 이름을 지정한 다음 추가 단추를 누릅니다.

도구 창에서 모니커를 사용하는 주요 위치입니다. 각각에 대한 지침을 따릅니다.

  1. 탭이 충분히 작아지면 도구 창 탭입니다( Ctrl+Tab 창 전환기에서도 사용됨).

    ToolWindowPane 형식에서 파생되는 클래스의 생성자에 다음 줄을 추가합니다.

    // Replace this KnownMoniker with your desired ImageMoniker
    this.BitmapImageMoniker = KnownMonikers.Blank;
    
  2. 도구 창을 여는 명령입니다.

    .vsct 패키지 파일에서 도구 창의 명령 단추를 편집합니다.

    <Button guid="guidPackageCmdSet" id="CommandId" priority="0x0100" type="Button">
      <Parent guid="guidSHLMainMenu" id="IDG_VS_WNDO_OTRWNDWS1"/>
      <!-- Replace this KnownMoniker with your desired ImageMoniker -->
      <Icon guid="ImageCatalogGuid" id="Blank" />
      <!-- Add this -->
      <CommandFlag>IconIsMoniker</CommandFlag>
      <Strings>
        <ButtonText>MyToolWindow</ButtonText>
      </Strings>
    </Button>
    

    다음 항목이 <Extern> 요소 뒤에 파일 맨 위에도 있는지 확인합니다.

    <Include href="KnownImageIds.vsct"/>
    

기존 도구 창에서 이미지 모니커를 사용하려면 어떻게 해야 하나요?

이미지 모니커를 사용하도록 기존 도구 창을 업데이트하는 것은 새 도구 창을 만드는 단계와 비슷합니다.

도구 창에서 모니커를 사용하는 주요 위치입니다. 각각에 대한 지침을 따릅니다.

  1. 탭이 충분히 작아지면 도구 창 탭입니다( Ctrl+Tab 창 전환기에서도 사용됨).

    1. ToolWindowPane 형식에서 파생되는 클래스의 생성자에서 다음 줄을 제거합니다(있는 경우).

      this.BitmapResourceID = <Value>;
      this.BitmapIndex = <Value>;
      
    2. 위의 "새 도구 창에서 이미지 모니커를 사용하려면 어떻게 하나요?" 섹션의 1단계를 참조하세요.

  2. 도구 창을 여는 명령입니다.

    • 위의 "새 도구 창에서 이미지 모니커를 사용하려면 어떻게 하나요?" 섹션의 2단계를 참조하세요.

.vsct 파일에서 이미지 모니커를 사용하려면 어떻게 해야 하나요?

아래 주석 줄에 표시된 대로 파일을 업데이트합니다 .vsct .

<?xml version="1.0" encoding="utf-8"?>
<CommandTable xmlns="http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <!--  Include the definitions for images included in the VS image catalog -->
  <Include href="KnownImageIds.vsct"/>
  <Commands package="guidMyPackage">
    <Buttons>
      <Button guid="guidMyCommandSet" id="cmdidMyCommand" priority="0x0000" type="Button">
        <!-- Add an Icon element, changing the attributes to match the image moniker you want to use.
             In this case, we're using the Guid for the VS image catalog.
             Change the id attribute to be the ID of the desired image moniker. -->
        <Icon guid="ImageCatalogGuid" id="OpenFolder" />
        <CommandFlag>DynamicVisibility</CommandFlag>
        <CommandFlag>DefaultInvisible</CommandFlag>
        <CommandFlag>DefaultDisabled</CommandFlag>
        <CommandFlag>CommandWellOnly</CommandFlag>
        <CommandFlag>IconAndText</CommandFlag>
        <!-- Add the IconIsMoniker CommandFlag -->
        <CommandFlag>IconIsMoniker</CommandFlag>
        <Strings>
          <ButtonText>Quick Fixes...</ButtonText>
          <CommandName>Show Quick Fixes</CommandName>
          <CanonicalName>ShowQuickFixes</CanonicalName>
          <LocCanonicalName>ShowQuickFixes</LocCanonicalName>
        </Strings>
      </Button>
    </Buttons>
  </Commands>
  <!-- It is recommended that you remove <Bitmap> elements that are no longer used in the vsct file -->
  <Symbols>
    <GuidSymbol name="guidMyPackage"    value="{1491e936-6ffe-474e-8371-30e5920d8fdd}" />
    <GuidSymbol name="guidMyCommandSet" value="{10347de4-69a9-47f4-a950-d3301f6d2bc7}">
      <IDSymbol name="cmdidMyCommand" value="0x9437" />
    </GuidSymbol>
  </Symbols>
</CommandTable>

이전 버전의 Visual Studio에서도 .vsct 파일을 읽어야 하는 경우 어떻게 되나요?

이전 버전의 Visual Studio에서는 IconIsMoniker 명령 플래그를 인식하지 않습니다. 이미지 서비스를 지원하는 Visual Studio 버전에서 이미지 서비스의 이미지를 사용할 수 있지만 이전 버전의 Visual Studio에서 이전 스타일의 이미지를 계속 사용할 수 있습니다. 이렇게 하려면 .vsct 파일을 변경하지 않아 (따라서 이전 버전의 Visual Studio와 호환 가능), .vsct 파일의 <Bitmaps> 요소에 정의된 GUID/ID 쌍에서 이미지 모니커 GUID/ID 쌍으로 매핑하는 CSV(쉼표로 구분된 값) 파일을 만듭니다.

매핑 CSV 파일의 형식은 다음과 같습니다.

Icon guid, Icon id, Moniker guid, Moniker id
b714fcf7-855e-4e4c-802a-1fd87144ccad,1,fda30684-682d-421c-8be4-650a2967058e,100
b714fcf7-855e-4e4c-802a-1fd87144ccad,2,fda30684-682d-421c-8be4-650a2967058e,200

CSV 파일은 패키지와 함께 배포되고 해당 위치는 ProvideMenuResource 패키지 특성의 IconMappingFilename 속성에 의해 지정됩니다.

[ProvideMenuResource("MyPackage.ctmenu", 1, IconMappingFilename="IconMappings.csv")]

IconMappingFilename은 위 예제와 같이 $PackageFolder$에 암시적으로 루트된 상대 경로이거나 환경 변수(예: @"%UserProfile%\dir1\dir2\MyMappingFile.csv")로 정의된 디렉터리에 명시적으로 루팅된 절대 경로입니다.

프로젝트 시스템을 이식하려면 어떻게 해야 하나요?

프로젝트에 ImageMonikers를 제공하는 방법

  1. 프로젝트의 IVsHierarchy에서 VSHPROPID_SupportsIconMonikers 구현하고 true를 반환합니다.

  2. VSHPROPID_IconMonikerImageList(원래 프로젝트가 VSHPROPID_IconImgList 사용한 경우) 또는 VSHPROPID_IconMonikerGuid, VSHPROPID_IconMonikerId, VSHPROPID_OpenFolderIconMonikerGuid, VSHPROPID_OpenFolderIconMonikerId 구현합니다(원래 프로젝트가 VSHPROPID_IconHandle 사용하고 VSHPROPID_OpenFolderIconHandle 경우).

  3. 확장 지점에서 요청하는 경우 아이콘의 "레거시" 버전을 만들도록 아이콘에 대한 원래 VSHPROPID 구현을 변경합니다. IVsImageService2 는 해당 아이콘을 가져오는 데 필요한 기능을 제공합니다.

    VB/C# 프로젝트 버전에 대한 추가 요구 사항

    프로젝트가 가장 바깥쪽 변형임을 감지한 경우에만 VSHPROPID_SupportsIconMonikers을 구현하십시오. 그렇지 않으면 실제 최외곽 플레버가 이미지 모니커를 지원하지 않을 수 있으며, 기본 플레버가 사용자 지정 이미지를 효과적으로 "숨길" 수 있습니다.

    CPS에서 이미지 모니커를 사용하려면 어떻게 하나요?

    CPS(일반 프로젝트 시스템)에서 사용자 지정 이미지 설정은 수동으로 또는 프로젝트 시스템 확장성 SDK와 함께 제공되는 항목 템플릿을 통해 수행할 수 있습니다.

    프로젝트 시스템 확장성 SDK 사용

    프로젝트 유형/항목 유형에 대한 사용자 지정 아이콘 제공의 지침에 따라 CPS 이미지를 사용자 지정합니다. CPS에 대한 자세한 내용은 Visual Studio Project System 확장성 설명서에서 찾을 수 있습니다.

    ImageMonikers 수동 사용

  4. 프로젝트 시스템에서 IProjectTreeModifier 인터페이스를 구현하고 내보냅니다.

  5. 사용할 KnownMoniker 또는 사용자 지정 이미지 모니커를 결정합니다.

  6. ApplyModifications 메서드에서 아래 예제와 유사하게 새 트리를 반환하기 전에 메서드의 어딘가에서 다음을 수행합니다.

    // Replace this KnownMoniker with your desired ImageMoniker
    tree = tree.SetIcon(KnownMonikers.Blank.ToProjectSystemType());
    
  7. 새 트리를 만드는 경우 아래 예제와 유사하게 원하는 모니커를 NewTree 메서드에 전달하여 사용자 지정 이미지를 설정할 수 있습니다.

    // Replace this KnownMoniker with your desired ImageMoniker
    ProjectImageMoniker icon         = KnownMonikers.FolderClosed.ToProjectSystemType();
    ProjectImageMoniker expandedIcon = KnownMonikers.FolderOpened.ToProjectSystemType();
    
    return this.ProjectTreeFactory.Value.NewTree(/*caption*/<value>,
                                                 /*filePath*/<value>,
                                                 /*browseObjectProperties*/<value>,
                                                 icon,
                                                 expandedIcon);
    

실제 이미지 스트립에서 모니커 기반 이미지 스트립으로 변환하려면 어떻게 해야 하나요?

HIMAGELIST를 지원해야 합니다.

이미지 서비스를 사용하도록 업데이트하려는 코드에 대한 기존 이미지 스트립이 이미 있지만 이미지 목록을 전달해야 하는 API로 인해 제약을 받는 경우에도 이미지 서비스의 이점을 얻을 수 있습니다. 모니커 기반 이미지 스트립을 만들려면 아래 단계에 따라 기존 모니커에서 매니페스트를 만듭니다.

  1. ManifestFromResources 도구를 실행하여 이미지 스트립을 전달합니다. 그러면 스트립에 대한 매니페스트가 생성됩니다.

    • 권장: 매니페스트의 사용량에 맞게 기본이 아닌 이름을 제공합니다.
  2. KnownMonikers만 사용하는 경우 다음을 수행합니다.

    • 매니페스트의 <이미지> 섹션을 이미지/<로 바>꿉다.

    • 모든 하위 이미지 ID(<imagestrip name>_##가 포함된 항목)을 제거합니다.

    • 권장 사항: AssetsGuid 기호 및 이미지 스트립 기호의 이름을 해당 용도에 맞게 바꿉니다.

    • ContainedImage의 GUID를 $(ImageCatalogGuid)로 바꾸고, 각 ContainedImage의 ID를 $(<모니커>)로 바꾸고, 각 ContainedImage에 External="true" 특성을 추가합니다.

      • <모니커는> 이미지와 일치하는 KnownMoniker으로 바꿔야 하며, 이름에서 "KnownMonikers."를 제거해야 합니다.
    • 기호 섹션의 맨 위에 <Import Manifest="$(ManifestFolder)\<Relative install dir 경로를 *>\Microsoft.VisualStudio.ImageCatalog.imagemanifest" /*> 행을 추가<>합니다.

      • 상대 경로는 매니페스트에 대한 설치 작성에 정의된 배포 위치에 따라 결정됩니다.
  3. ManifestToCode 도구를 실행하여 기존 코드에 이미지 스트립에 대한 이미지 서비스를 쿼리하는 데 사용할 수 있는 모니커가 있도록 래퍼를 생성합니다.

    • 권장 사항: 래퍼 및 네임스페이스에 대해 사용 목적에 맞는 기본이 아닌 이름을 제공합니다.
  4. 이미지 서비스 및 새 파일을 사용하려면 추가, 설치 작성/배포 및 기타 코드 변경을 모두 수행합니다.

    내부 및 외부 이미지를 포함한 샘플 매니페스트는 다음과 같습니다.

<?xml version="1.0"?>
<ImageManifest
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns="http://schemas.microsoft.com/VisualStudio/ImageManifestSchema/2014">

  <Symbols>
    <!-- This needs to be the relative path from your manifest to the ImageCatalog's manifest
         where $(ManifestFolder) is the deployed location of this manifest. -->
    <Import Manifest="$(ManifestFolder)\<RelPath>\Microsoft.VisualStudio.ImageCatalog.imagemanifest" />

    <String Name="Resources" Value="/My.Assembly.Name;Component/Resources/ImageStrip" />
    <Guid Name="ImageGuid" Value="{fb41b7ef-6587-480c-aa27-5b559d42cfc9}" />
    <Guid Name="ImageStripGuid" Value="{9c84a570-d9a7-4052-a340-188fb276f973}" />
    <ID Name="MyImage_0" Value="100" />
    <ID Name="MyImage_1" Value="101" />
    <ID Name="InternalList" Value="1001" />
    <ID Name="ExternalList" Value="1002" />
  </Symbols>

  <Images>
    <Image Guid="$(ImageGuid)" ID="$(MyImage_0)">
      <Source Uri="$(Resources)/MyImage_0.png">
        <Size Value="16" />
      </Source>
    </Image>
    <Image Guid="$(ImageGuid)" ID="$(MyImage_1)">
      <Source Uri="$(Resources)/MyImage_1.png">
        <Size Value="16" />
      </Source>
    </Image>
  </Images>

  <ImageLists>
    <ImageList Guid="$(ImageStripGuid)" ID="$(InternalList)">
      <ContainedImage Guid="$(ImageGuid)" ID="$(MyImage_0)" />
      <ContainedImage Guid="$(ImageGuid)" ID="$(MyImage_1)" />
    </ImageList>
    <ImageList Guid="$(ImageStripGuid)" ID="$(ExternalList)">
      <ContainedImage Guid="$(ImageCatalogGuid)" ID="$(StatusError)" External="true" />
      <ContainedImage Guid="$(ImageCatalogGuid)" ID="$(StatusWarning)" External="true" />
      <ContainedImage Guid="$(ImageCatalogGuid)" ID="$(StatusInformation)" External="true" />
    </ImageList>
  </ImageLists>

</ImageManifest>

HIMAGELIST를 지원할 필요가 없습니다.

  1. 이미지 스트립의 이미지와 일치하는 KnownMonikers 집합을 결정하거나 이미지 스트립의 이미지에 대한 고유한 모니커를 만듭니다.

  2. 모니커를 대신 사용하도록 이미지 스트립의 필수 인덱스에서 이미지를 가져오는 데 사용한 매핑을 업데이트합니다.

  3. 이미지 서비스를 사용하여 업데이트된 매핑을 통해 모니커를 요청하도록 코드를 업데이트합니다. (이는 관리 코드에 대해 CrispImages 로 업데이트하거나 이미지 서비스에서 HBITMAP 또는 HICON을 요청하고 네이티브 코드에 대해 전달한다는 의미일 수 있습니다.)

이미지 테스트

이미지 라이브러리 뷰어 도구를 사용하여 이미지 매니페스트를 테스트하여 모든 항목이 올바르게 작성되었는지 확인할 수 있습니다. Visual Studio 2015 SDK에서 도구를 찾을 수 있습니다. 이 도구 및 기타 도구에 대한 설명서는 여기에서 찾을 수 있습니다.

추가 리소스

Samples

다양한 Visual Studio 확장성 지점의 일부로 이미지 서비스를 사용하는 방법을 보여 주도록 GitHub의 여러 Visual Studio 샘플이 업데이트되었습니다.

최신 샘플을 http://github.com/Microsoft/VSSDK-Extensibility-Samples에서 확인하세요.

Tooling

Image Service에서 작동하는 UI를 만들거나 업데이트하는 데 도움이 되도록 Image Service에 대한 지원 도구 집합이 만들어졌습니다. 각 도구에 대한 자세한 내용은 도구와 함께 제공되는 설명서를 확인하세요. 도구는 Visual Studio 2015 SDK의 일부로 포함됩니다.

ManifestFromResources

리소스의 매니페스트 도구는 이미지 리소스 목록(PNG 또는 XAML)을 사용하고 이미지 서비스와 함께 해당 이미지를 사용하기 위한 이미지 매니페스트 파일을 생성합니다.

ManifestToCode

매니페스트-코드 도구는 이미지 매니페스트 파일을 사용하고 코드(C++, C#또는 VB) 또는 .vsct 파일에서 매니페스트 값을 참조하기 위한 래퍼 파일을 생성합니다.

ImageLibraryViewer

이미지 라이브러리 뷰어 도구는 이미지 매니페스트를 로드할 수 있으며 사용자가 Visual Studio에서 매니페스트가 올바르게 작성되었는지 확인하는 것과 동일한 방식으로 해당 매니페스트를 조작할 수 있습니다. 사용자는 배경, 크기, DPI 설정, 고대비 및 기타 설정을 변경할 수 있습니다. 또한 매니페스트에서 오류를 찾기 위해 로드 정보를 표시하고 매니페스트의 각 이미지에 대한 원본 정보를 표시합니다.

자주 묻는 질문(FAQ)

  • <Reference Include="Microsoft.VisualStudio.*.Interop.14.0.DesignTime"을 로드할 때 포함해야 하는 종속성이 있나요?>

    • 모든 interop DLL에 EmbedInteropTypes="true"를 설정합니다.
  • 내 확장을 사용하여 이미지 매니페스트를 배포하려면 어떻게 해야 하나요?

    • .imagemanifest 프로젝트에 파일을 추가합니다.

    • "VSIX에 포함"을 True로 설정합니다.

  • 내 이미지가 여전히 작동하지 않습니다. 무엇이 잘못되었는지 어떻게 알 수 있나요?

    • Visual Studio에서 이미지 매니페스트를 찾지 못할 수 있습니다. 성능상의 이유로 Visual Studio는 폴더 검색 깊이를 제한하므로 이미지 매니페스트를 확장의 루트 폴더에 유지하는 것이 좋습니다.

    • 이미지 매니페스트 파일에 어셈블리 정보가 누락되었을 수 있습니다. 강력한 이름의 어셈블리는 Visual Studio에서 로드하기 위해 추가 정보가 필요합니다. 강력한 이름의 어셈블리를 로드하려면 어셈블리 이름 외에도 이미지 매니페스트의 이미지에 대한 리소스 URI에 어셈블리 버전 및 공개 키 토큰을 포함해야 합니다.

      <ImageManifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/VisualStudio/ImageManifestSchema/2014">
        <Symbols>
          <String Name="Resources" Value="/Microsoft.VisualStudio.Shell.UI.Internal;v17.0.0.0;b03f5f7f11d50a3a;Component/Resources" />
          ...
        </Symbols>
        ...
      </ImageManifest>
      
    • 이미지 어셈블리에 대한 코드베이스 항목이 누락되었을 수 있습니다. Visual Studio에 필요한 시간까지 어셈블리가 아직 로드되지 않은 경우 어셈블리를 로드하기 위해 어셈블리를 찾을 위치를 알아야 합니다. 어셈블리에 대한 코드베이스를 추가하려면 ProvideCodeBaseAttribute를 사용하여 코드베이스 항목이 생성되고 확장의 pkgdef에 포함되도록 할 수 있습니다.

      [assembly: ProvideCodeBase(AssemblyName = "ClassLibrary1", Version = "1.0.0.0", CodeBase = "$PackageFolder$\\ClassLibrary1.dll")]
      
    • 이전 옵션이 이미지 로드 문제를 해결하지 않는 경우 확장의 pkgdef에 다음 항목을 삭제하여 로깅을 사용하도록 설정할 수 있습니다.

      [$RootKey$\ImageLibrary]
      "TraceLevel"="Verbose"
      "TraceFilename"="ImageLibrary.log"
      

      그러면 %UserProfile% 폴더에 ImageLibrary.log 이라는 로그 파일이 생성됩니다. pkgdef에 이러한 항목을 추가한 후 개발자 명령 프롬프트에서 "devenv /updateConfiguration"을 실행해야 합니다. 이렇게 하면 로깅 항목이 활성화되고 VS에서 이미지 매니페스트 캐시를 새로 고쳐 이미지 매니페스트를 읽을 때 발생할 수 있는 오류를 찾을 수 있습니다. 그런 다음 이미지가 로드될 것으로 예상되는 시나리오를 실행하는 경우 로그 파일에는 이미지에 대한 등록 로깅과 요청 로깅이 모두 포함됩니다.

  • CPS 프로젝트 시스템을 업데이트하고 있습니다. ImageNameStockIconService는 어떻게 되었나요?

    • 이는 CPS가 모니커를 사용하도록 업데이트될 때 제거되었습니다. 더 이상 StockIconService를 호출할 필요가 없으며 CPS 유틸리티의 ToProjectSystemType() 확장 메서드를 사용하여 원하는 KnownMoniker를 메서드 또는 속성에 전달하기만 하면 됩니다. 아래에서 ImageName에서 KnownMonikers로의 매핑을 찾을 수 있습니다.

      ImageName KnownMoniker
      ImageName.OfflineWebApp KnownImageIds.Web
      ImageName.WebReferencesFolder KnownImageIds.Web
      ImageName.참조폴더열기 KnownImageIds.FolderOpened
      ImageName.ReferenceFolder KnownImageIds.Reference
      ImageName.Reference KnownImageIds.Reference
      ImageName.SdlWebReference KnownImageIds.웹참조폴더
      ImageName.디스코웹레퍼런스 KnownImageIds.DynamicDiscoveryDocument
      ImageName.폴더 KnownImageIds.FolderClosed
      이미지이름.폴더열기 KnownImageIds.FolderOpened
      이미지이름.제외된_폴더 KnownImageIds.HiddenFolderClosed
      이미지이름.제외된폴더열기 숨겨진폴더열림_이미지ID
      ImageName.제외된파일 알려진이미지ID.숨김파일
      이미지 이름.종속 파일 (ImageName.DependentFile) KnownImageIds.GenerateFile
      ImageName.누락된파일 KnownImageIds.DocumentWarning
      ImageName.WindowsForm KnownImageIds.WindowsForm
      ImageName.WindowsUserControl KnownImageIds.UserControl
      ImageName.WindowsComponent KnownImageIds.ComponentFile
      ImageName.XmlSchema KnownImageIds.XMLSchema
      ImageName.XmlFile KnownImageIds.XMLFile
      ImageName.WebForm KnownImageIds.Web
      ImageName.WebService KnownImageIds.WebService
      ImageName.WebUserControl KnownImageIds.웹사용자제어
      ImageName.WebCustomUserControl KnownImageIds.WebCustomControl
      ImageName.AspPage KnownImageIds.ASPFile
      ImageName.GlobalApplicationClass KnownImageIds.SettingsFile
      ImageName.WebConfig KnownImageIds.ConfigurationFile (구성 파일)
      ImageName.HtmlPage KnownImageIds.HTMLFile
      ImageName.StyleSheet KnownImageIds.StyleSheet
      ImageName.ScriptFile KnownImageIds.JSScript
      ImageName.TextFile KnownImageIds.Document
      ImageName.SettingsFile KnownImageIds.설정
      ImageName.리소스 KnownImageIds.DocumentGroup
      이미지이름.비트맵 KnownImageIds.Image
      ImageName.Icon KnownImageIds.IconFile
      ImageName.Image KnownImageIds.Image
      ImageName.ImageMap KnownImageIds.ImageMapFile
      ImageName.XWorld KnownImageIds.XWorldFile
      ImageName.Audio KnownImageIds.사운드
      ImageName.Video KnownImageIds.Media
      ImageName.Cab KnownImageIds.CABProject
      ImageName.Jar KnownImageIds.JARFile
      ImageName.DataEnvironment KnownImageIds.DataTable
      ImageName.PreviewFile KnownImageIds.Report
      ImageName.DanglingReference KnownImageIds.ReferenceWarning
      ImageName.XsltFile KnownImageIds.XSLTransform
      ImageName.Cursor 알려진이미지ID.커서파일
      ImageName.AppDesignerFolder KnownImageIds.Property
      ImageName.Data KnownImageIds.Database
      ImageName.Application KnownImageIds.Application
      ImageName.DataSet KnownImageIds.DatabaseGroup
      ImageName.Pfx KnownImageIds.Certificate
      ImageName.Snk KnownImageIds.Rule
      ImageName.VisualBasicProject KnownImageIds.VBProjectNode
      ImageName.CSharpProject KnownImageIds.CSProjectNode
      ImageName.Empty KnownImageIds.Blank
      ImageName.누락된폴더 KnownImageIds.FolderOffline
      ImageName.SharedImportReference KnownImageIds.SharedProject
      ImageName.SharedProjectCs KnownImageIds.CSSharedProject
      ImageName.SharedProjectVc KnownImageIds.CPPSharedProject
      ImageName.SharedProjectJs KnownImageIds.JSSharedProject
      ImageName.CSharpCodeFile KnownImageIds.CSFileNode
      ImageName.VisualBasicCodeFile (비주얼 베이직 코드 파일) KnownImageIds.VBFileNode
  • 완료 목록 공급자를 업데이트하고 있습니다. 이전 StandardGlyphGroupStandardGlyph 값과 일치하는 KnownMonikers는 무엇인가요?

    이름 이름 이름
    GlyphGroupClass GlyphItemPublic ClassPublic
    GlyphGroupClass GlyphItemInternal ClassInternal
    GlyphGroupClass GlyphItemFriend ClassInternal
    GlyphGroupClass GlyphItemProtected ClassProtected
    GlyphGroupClass GlyphItemPrivate 클래스프라이빗
    GlyphGroupClass GlyphItemShortcut ClassShortcut
    GlyphGroupConstant GlyphItemPublic ConstantPublic
    글리프그룹컨스턴트 (GlyphGroupConstant) GlyphItemInternal ConstantInternal
    GlyphGroupConstant GlyphItemFriend ConstantInternal
    GlyphGroupConstant GlyphItemProtected ConstantProtected
    GlyphGroupConstant GlyphItemPrivate ConstantPrivate
    GlyphGroupConstant GlyphItemShortcut ConstantShortcut
    글리프그룹 대리자 GlyphItemPublic DelegatePublic
    GlyphGroupDelegate GlyphItemInternal DelegateInternal
    GlyphGroupDelegate GlyphItemFriend DelegateInternal
    GlyphGroupDelegate GlyphItemProtected DelegateProtected
    GlyphGroupDelegate GlyphItemPrivate DelegatePrivate
    GlyphGroupDelegate GlyphItemShortcut DelegateShortcut
    GlyphGroupEnum GlyphItemPublic EnumerationPublic
    GlyphGroupEnum GlyphItemInternal EnumerationInternal
    GlyphGroupEnum GlyphItemFriend EnumerationInternal
    GlyphGroupEnum GlyphItemProtected EnumerationProtected
    GlyphGroupEnum GlyphItemPrivate EnumerationPrivate
    GlyphGroupEnum GlyphItemShortcut 열거 바로 가기
    GlyphGroupEnumMember GlyphItemPublic 열거_항목_공개
    GlyphGroupEnumMember GlyphItemInternal 열거항목내부
    GlyphGroupEnumMember GlyphItemFriend 열거항목내부
    GlyphGroupEnumMember GlyphItemProtected EnumerationItemProtected
    GlyphGroupEnumMember GlyphItemPrivate EnumerationItemPrivate
    GlyphGroupEnumMember GlyphItemShortcut 열거 항목 바로 가기
    GlyphGroupEvent GlyphItemPublic EventPublic
    GlyphGroupEvent GlyphItemInternal EventInternal
    GlyphGroupEvent GlyphItemFriend EventInternal
    GlyphGroupEvent GlyphItemProtected 이벤트 보호
    GlyphGroupEvent GlyphItemPrivate EventPrivate
    GlyphGroupEvent GlyphItemShortcut EventShortcut
    GlyphGroupException GlyphItemPublic ExceptionPublic
    GlyphGroupException GlyphItemInternal ExceptionInternal
    GlyphGroupException GlyphItemFriend ExceptionInternal
    GlyphGroupException GlyphItemProtected ExceptionProtected
    GlyphGroupException GlyphItemPrivate ExceptionPrivate
    GlyphGroupException GlyphItemShortcut ExceptionShortcut
    GlyphGroupField GlyphItemPublic FieldPublic
    GlyphGroupField GlyphItemInternal FieldInternal
    GlyphGroupField GlyphItemFriend FieldInternal
    GlyphGroupField GlyphItemProtected 필드보호 (FieldProtected)
    GlyphGroupField GlyphItemPrivate FieldPrivate
    GlyphGroupField GlyphItemShortcut 필드단축키
    GlyphGroupInterface GlyphItemPublic InterfacePublic
    GlyphGroupInterface GlyphItemInternal InterfaceInternal
    GlyphGroupInterface GlyphItemFriend InterfaceInternal
    글리프그룹인터페이스 GlyphItemProtected 인터페이스 보호됨
    GlyphGroupInterface GlyphItemPrivate InterfacePrivate
    GlyphGroupInterface GlyphItemShortcut 인터페이스 단축키
    GlyphGroupMacro GlyphItemPublic MacroPublic
    GlyphGroupMacro GlyphItemInternal MacroInternal
    GlyphGroupMacro GlyphItemFriend MacroInternal
    GlyphGroupMacro GlyphItemProtected MacroProtected
    GlyphGroupMacro GlyphItemPrivate MacroPrivate
    GlyphGroupMacro GlyphItemShortcut MacroShortcut
    GlyphGroupMap GlyphItemPublic MapPublic
    글리프 그룹 맵 GlyphItemInternal MapInternal
    GlyphGroupMap GlyphItemFriend MapInternal
    GlyphGroupMap GlyphItemProtected MapProtected
    GlyphGroupMap GlyphItemPrivate MapPrivate
    GlyphGroupMap GlyphItemShortcut MapShortcut
    GlyphGroupMapItem GlyphItemPublic 맵아이템공개
    GlyphGroupMapItem GlyphItemInternal MapItemInternal
    글리프 그룹 맵 항목 GlyphItemFriend MapItemInternal
    GlyphGroupMapItem GlyphItemProtected 맵항목보호됨
    GlyphGroupMapItem GlyphItemPrivate MapItemPrivate
    GlyphGroupMapItem GlyphItemShortcut 지도항목바로가기
    글리프그룹메소드 GlyphItemPublic MethodPublic
    글리프그룹메소드 GlyphItemInternal MethodInternal
    GlyphGroupMethod (글리프 그룹 메소드) GlyphItemFriend MethodInternal
    GlyphGroupMethod GlyphItemProtected MethodProtected
    GlyphGroupMethod GlyphItemPrivate MethodPrivate
    GlyphGroupMethod GlyphItemShortcut MethodShortcut
    GlyphGroupOverload GlyphItemPublic MethodPublic
    글리프 그룹 과부하 GlyphItemInternal MethodInternal
    GlyphGroupOverload GlyphItemFriend MethodInternal
    글리프그룹오버로드 GlyphItemProtected MethodProtected
    GlyphGroupOverload GlyphItemPrivate MethodPrivate
    GlyphGroupOverload GlyphItemShortcut MethodShortcut
    GlyphGroupModule GlyphItemPublic ModulePublic
    GlyphGroupModule GlyphItemInternal ModuleInternal
    GlyphGroupModule GlyphItemFriend ModuleInternal
    GlyphGroupModule GlyphItemProtected 모듈보호됨
    GlyphGroupModule GlyphItemPrivate ModulePrivate (모듈프라이빗)
    GlyphGroupModule GlyphItemShortcut ModuleShortcut
    GlyphGroupNamespace GlyphItemPublic NamespacePublic
    GlyphGroupNamespace GlyphItemInternal NamespaceInternal
    GlyphGroupNamespace GlyphItemFriend NamespaceInternal
    GlyphGroupNamespace GlyphItemProtected NamespaceProtected
    GlyphGroupNamespace GlyphItemPrivate NamespacePrivate
    GlyphGroupNamespace GlyphItemShortcut NamespaceShortcut
    GlyphGroupOperator GlyphItemPublic OperatorPublic
    글립그룹연산자 GlyphItemInternal OperatorInternal
    GlyphGroupOperator GlyphItemFriend OperatorInternal
    GlyphGroupOperator GlyphItemProtected 운영자보호
    GlyphGroupOperator GlyphItemPrivate OperatorPrivate
    GlyphGroupOperator GlyphItemShortcut OperatorShortcut
    GlyphGroupProperty GlyphItemPublic PropertyPublic
    GlyphGroupProperty GlyphItemInternal PropertyInternal
    GlyphGroupProperty GlyphItemFriend PropertyInternal
    GlyphGroupProperty GlyphItemProtected 재산 보호됨
    GlyphGroupProperty GlyphItemPrivate PropertyPrivate
    GlyphGroupProperty GlyphItemShortcut PropertyShortcut
    GlyphGroupStruct GlyphItemPublic 구조공개
    GlyphGroupStruct (글리프 그룹 구조체) GlyphItemInternal StructureInternal
    GlyphGroupStruct GlyphItemFriend 구조내부
    GlyphGroupStruct GlyphItemProtected 구조보호됨
    GlyphGroupStruct GlyphItemPrivate StructurePrivate
    GlyphGroupStruct GlyphItemShortcut StructureShortcut
    GlyphGroupTemplate GlyphItemPublic 템플릿퍼블릭
    글리프그룹템플릿 (GlyphGroupTemplate) GlyphItemInternal TemplateInternal
    GlyphGroupTemplate GlyphItemFriend TemplateInternal
    글리프그룹템플릿 GlyphItemProtected 템플릿보호
    GlyphGroupTemplate GlyphItemPrivate TemplatePrivate
    GlyphGroupTemplate GlyphItemShortcut 템플릿 단축키
    GlyphGroupTypedef GlyphItemPublic TypeDefinitionPublic
    GlyphGroupTypedef GlyphItemInternal TypeDefinitionInternal
    GlyphGroupTypedef GlyphItemFriend TypeDefinitionInternal
    GlyphGroupTypedef GlyphItemProtected 형식정의보호됨
    GlyphGroupTypedef GlyphItemPrivate 유형정의비공개
    GlyphGroupTypedef GlyphItemShortcut 타입 정의 단축키
    GlyphGroupType GlyphItemPublic TypePublic
    GlyphGroupType GlyphItemInternal 타입내부
    글리프그룹유형 GlyphItemFriend TypeInternal
    GlyphGroupType GlyphItemProtected TypeProtected
    GlyphGroupType GlyphItemPrivate TypePrivate
    글리프그룹유형 GlyphItemShortcut 유형 단축키
    GlyphGroupUnion GlyphItemPublic UnionPublic
    GlyphGroupUnion GlyphItemInternal UnionInternal
    GlyphGroupUnion GlyphItemFriend UnionInternal
    GlyphGroupUnion GlyphItemProtected UnionProtected
    GlyphGroupUnion GlyphItemPrivate UnionPrivate
    GlyphGroupUnion GlyphItemShortcut UnionShortcut
    GlyphGroupVariable GlyphItemPublic FieldPublic
    GlyphGroupVariable GlyphItemInternal FieldInternal
    GlyphGroupVariable GlyphItemFriend FieldInternal
    GlyphGroupVariable GlyphItemProtected 필드보호 (FieldProtected)
    GlyphGroupVariable GlyphItemPrivate FieldPrivate
    GlyphGroupVariable GlyphItemShortcut 필드단축키
    GlyphGroupValueType GlyphItemPublic ValueTypePublic
    GlyphGroupValueType GlyphItemInternal ValueTypeInternal
    GlyphGroupValueType GlyphItemFriend ValueTypeInternal
    GlyphGroupValueType GlyphItemProtected ValueTypeProtected
    GlyphGroupValueType GlyphItemPrivate 값형비공개
    GlyphGroupValueType GlyphItemShortcut ValueTypeShortcut
    GlyphGroupIntrinsic GlyphItemPublic ObjectPublic
    GlyphGroupIntrinsic GlyphItemInternal ObjectInternal
    GlyphGroupIntrinsic GlyphItemFriend ObjectInternal
    GlyphGroupIntrinsic GlyphItemProtected 개체 보호됨
    GlyphGroupIntrinsic GlyphItemPrivate ObjectPrivate
    GlyphGroupIntrinsic GlyphItemShortcut ObjectShortcut
    GlyphGroupJSharpMethod GlyphItemPublic MethodPublic
    GlyphGroupJSharpMethod GlyphItemInternal MethodInternal
    GlyphGroupJSharpMethod GlyphItemFriend MethodInternal
    GlyphGroupJSharpMethod GlyphItemProtected MethodProtected
    GlyphGroupJSharpMethod GlyphItemPrivate MethodPrivate
    GlyphGroupJSharpMethod 글리프아이템단축키 MethodShortcut
    GlyphGroupJSharpField GlyphItemPublic FieldPublic
    GlyphGroupJSharpField GlyphItemInternal FieldInternal
    GlyphGroupJSharpField GlyphItemFriend FieldInternal
    GlyphGroupJSharpField GlyphItemProtected 필드보호 (FieldProtected)
    GlyphGroupJSharpField GlyphItemPrivate FieldPrivate
    GlyphGroupJSharpField GlyphItemShortcut 필드단축키
    GlyphGroupJSharpClass GlyphItemPublic ClassPublic
    GlyphGroupJSharpClass GlyphItemInternal ClassInternal
    GlyphGroupJSharpClass GlyphItemFriend ClassInternal
    GlyphGroupJSharpClass GlyphItemProtected ClassProtected
    GlyphGroupJSharpClass GlyphItemPrivate 클래스프라이빗
    GlyphGroupJSharpClass GlyphItemShortcut ClassShortcut
    GlyphGroupJSharpNamespace GlyphItemPublic NamespacePublic
    GlyphGroupJSharpNamespace GlyphItemInternal NamespaceInternal
    GlyphGroupJSharpNamespace GlyphItemFriend NamespaceInternal
    GlyphGroupJSharpNamespace GlyphItemProtected NamespaceProtected
    GlyphGroupJSharpNamespace GlyphItemPrivate NamespacePrivate
    GlyphGroupJSharpNamespace GlyphItemShortcut NamespaceShortcut
    GlyphGroupJSharpInterface GlyphItemPublic InterfacePublic
    GlyphGroupJSharpInterface GlyphItemInternal InterfaceInternal
    GlyphGroupJSharpInterface GlyphItemFriend InterfaceInternal
    GlyphGroupJSharpInterface GlyphItemProtected 인터페이스 보호됨
    GlyphGroupJSharpInterface GlyphItemPrivate InterfacePrivate
    GlyphGroupJSharpInterface GlyphItemShortcut 인터페이스 단축키
    글리프그룹오류 상태 오류
    GlyphBscFile ClassFile
    GlyphAssembly Reference
    GlyphLibrary 라이브러리
    GlyphVBProject VBProjectNode
    GlyphCoolProject CSProjectNode
    GlyphCppProject CPPProjectNode
    GlyphDialogId Dialog
    GlyphOpenFolder 폴더 열림
    글리프닫힌폴더 폴더닫힘
    GlyphArrow 다음으로 이동
    GlyphCSharpFile CSFileNode
    GlyphCSharpExpansion 단편
    GlyphKeyword IntellisenseKeyword
    GlyphInformation 상태정보
    GlyphReference 클래스 메서드 참조
    GlyphRecursion 재귀
    GlyphXmlItem Tag
    GlyphJSharpProject 문서 컬렉션
    GlyphJSharpDocument (글리프제이샤프문서) 문서
    GlyphForwardType 다음으로 이동
    GlyphCallersGraph CallTo
    GlyphCallGraph CallFrom
    GlyphWarning 상태 경고
    GlyphMaybeReference 물음표
    GlyphMaybeCaller CallTo
    GlyphMaybeCall CallFrom
    GlyphExtensionMethod 확장 메서드
    GlyphExtensionMethodInternal 익스텐션 메서드
    GlyphExtensionMethodFriend ExtensionMethod
    GlyphExtensionMethodProtected ExtensionMethod
    GlyphExtensionMethodPrivate 확장 메서드
    GlyphExtensionMethodShortcut 확장 메서드
    GlyphXmlAttribute XmlAttribute
    GlyphXmlChild XmlElement
    GlyphXmlDescendant XmlDescendant
    GlyphXmlNamespace XmlNamespace
    글리프Xml속성질문 XmlAttributeLowConfidence (낮은 신뢰도의 XML 특성)
    GlyphXmlAttributeCheck XmlAttributeHighConfidence
    GlyphXmlChildQuestion 엑스엠엘 요소 - 낮은 신뢰도
    GlyphXmlChildCheck XML 요소 높은 신뢰도
    글리프Xml자손질문 XML 자손 낮은 신뢰도
    GlyphXmlDescendantCheck XmlDescendantHighConfidence
    GlyphCompletionWarning IntellisenseWarning