다음을 통해 공유


레이어 다이어그램에 명령 및 제스처 추가

Visual Studio Ultimate 의 레이어 다이어그램에 컨텍스트 메뉴 명령 및 제스처 처리를 정의할 수 있습니다. 이러한 확장을 다른 Visual Studio 사용자에게 배포할 수 있는 VSIX(Visual Studio Integration Extension)로 패키지할 수 있습니다.

원하는 경우 동일한 Visual Studio 프로젝트에서 몇 가지 명령과 제스처 처리기를 정의할 수 있습니다. 또한 이러한 몇 가지 프로젝트를 하나의 VSIX에 결합할 수 있습니다. 예를 들어 레이어 명령, 도메인별 언어 및 UML 다이어그램의 명령이 포함된 단일 VSIX를 정의할 수 있습니다.

참고

또한 사용자의 소스 코드를 레이어 다이어그램과 비교하여 아키텍처 유효성 검사를 사용자 지정할 수 있습니다.별도의 Visual Studio 프로젝트에서 아키텍처 유효성 검사를 정의해야 합니다.이 정의를 다른 확장과 동일한 VSIX에 추가할 수 있습니다.자세한 내용은 레이어 다이어그램에 사용자 지정 아키텍처 유효성 검사 추가을 참조하십시오.

레이어 확장을 작성하기 위한 요구 사항

레이어 확장을 개발할 컴퓨터에 다음 구성 요소가 설치되어 있어야 합니다.

  • Visual Studio Ultimate

  • Visual Studio SDK

  • SDK 시각화 및 모델링

새 VSIX에서 명령 또는 제스처 정의

확장을 만드는 가장 빠른 방법은 프로젝트 템플릿을 사용하는 것입니다. 이 방법을 사용하는 경우 코드와 VSIX 매니페스트가 동일한 프로젝트에 배치됩니다.

프로젝트 템플릿을 사용하여 확장을 정의하려면

  1. 파일 메뉴에서 새 프로젝트 명령을 사용하여 새 솔루션에서 프로젝트를 만듭니다.

  2. 새 프로젝트 대화 상자의 모델링 프로젝트에서 Layer Designer Command Extension 또는 Layer Designer Gesture Extension을 선택합니다.

    템플릿은 작동하는 작은 예가 포함된 프로젝트를 만듭니다.

  3. 확장을 테스트하려면 Ctrl+F5 또는 F5 키를 누릅니다.

    실험적 Visual Studio 인스턴스가 시작됩니다. 이 인스턴스에서 레이어 다이어그램을 만듭니다. 명령 확장이나 제스처 확장이 이 다이어그램에서 작동해야 합니다.

  4. 실험적 인스턴스를 닫고 샘플 코드를 수정합니다. 자세한 내용은 프로그램 코드에서 레이어 모델 탐색 및 업데이트을 참조하십시오.

  5. 동일한 프로젝트에 명령이나 제스처 처리기를 더 추가할 수 있습니다. 자세한 내용은 다음 단원 중 하나를 참조하십시오.

    메뉴 명령 정의

    제스처 처리기 정의

  6. Visual Studio의 주 인스턴스 또는 다른 컴퓨터에 확장을 설치하려면 **bin\***에서 .vsix 파일을 찾습니다. 이 파일을 설치할 컴퓨터에 복사한 다음 두 번 클릭합니다. 이 파일을 제거하려면 도구 메뉴에서 확장 관리자를 사용합니다.

별도의 VSIX에 명령 또는 제스처 추가

명령, 레이어 유효성 검사기 및 다른 확장이 포함된 VSIX를 만들려면 VSIX를 정의하기 위해 프로젝트를 만들고 처리기를 위해 별도의 프로젝트를 만드는 것이 좋습니다. 다른 유형의 모델링 확장에 대한 자세한 내용은 UML 모델 및 다이어그램 확장을 참조하십시오.

별도의 VSIX에 레이어 확장을 추가하려면

  1. 새 Visual Studio Ultimate 솔루션 또는 기존 솔루션에 클래스 라이브러리 프로젝트를 만듭니다. 새 프로젝트 대화 상자에서 **Visual C#**을 클릭한 다음 클래스 라이브러리를 클릭합니다. 이 프로젝트에는 명령 또는 제스처 처리기 클래스가 포함됩니다.

    참고

    하나의 클래스 라이브러리에 둘 이상의 명령 또는 제스처 처리기 클래스를 정의할 수 있지만 별도의 클래스 라이브러리에 레이어 유효성 검사 클래스를 정의해야 합니다.

  2. 솔루션에서 VSIX 프로젝트를 식별하거나 만듭니다. VSIX 프로젝트에는 source.extension.vsixmanifest라는 파일이 포함됩니다. VSIX 프로젝트를 추가하려면

    1. 새 프로젝트 대화 상자에서 **Visual C#**을 확장하고 확장성을 클릭한 다음 VSIX 프로젝트를 클릭합니다.

    2. 솔루션 탐색기에서 VSIX 프로젝트를 마우스 오른쪽 단추로 클릭하고 시작 프로젝트로 설정을 클릭합니다.

    3. Select Editions(버전 선택)를 클릭하고 Visual Studio Ultimate가 선택되어 있는지 확인합니다.

  3. source.extension.vsixmanifest자산에서 명령 또는 제스처 처리기 프로젝트를 MEF 구성 요소로 추가합니다.

    1. 자산.tab에서 새로 만들기 를 선택합니다.

    2. 유형 에서 Microsoft.VisualStudio.MefComponent 을 선택합니다.

    3. Source 에서 현재 솔루션에서의 프로젝트 를 선택하고 명령 또는 제스처 처리기 프로젝트의 이름을 선택합니다.

    4. 파일을 저장합니다.

  4. 명령 또는 제스처 처리기 프로젝트로 돌아가서 다음 프로젝트 참조를 추가합니다.

참조

수행할 수 있는 작업

Program Files\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\Architecture Tools\ExtensibilityRuntime\Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer.dll

레이어 만들기 및 편집

Microsoft.VisualStudio.Uml.Interfaces

레이어 만들기 및 편집

Microsoft.VisualStudio.ArchitectureTools.Extensibility

다이어그램에서 모양 수정

System.ComponentModel.Composition

MEF(Managed Extensibility Framework)를 사용하여 구성 요소 정의

Microsoft.VisualStudio.Modeling.Sdk.12.0

모델링 확장 정의

Microsoft.VisualStudio.Modeling.Sdk.Diagrams.12.0

모양 및 다이어그램 업데이트

  1. C# 클래스 라이브러리 프로젝트에서 클래스 파일을 편집하여 확장에 대한 코드를 포함합니다. 자세한 내용은 다음 단원 중 하나를 참조하십시오.

    메뉴 명령 정의

    제스처 처리기 정의

    프로그램 코드에서 레이어 모델 탐색 및 업데이트을 참조하십시오.

  2. 기능을 테스트하려면 Ctrl+F5 또는 F5 키를 누릅니다. 실험적 Visual Studio 인스턴스가 열립니다. 이 인스턴스에서 레이어 다이어그램을 만들거나 엽니다.

  3. Visual Studio의 주 인스턴스 또는 다른 컴퓨터에 VSIX를 설치하려면 VSIX 프로젝트의 bin 디렉터리에서 .vsix 파일을 찾습니다. VSIX를 설치할 컴퓨터에 이 파일을 복사합니다. Windows 탐색기 (Windows 8의 파일 탐색기) 에서 VSIX 파일을 더블 클릭 합니다.

    이 파일을 제거하려면 도구 메뉴에서 확장 관리자를 사용합니다.

메뉴 명령 정의

기존 제스처 또는 명령 프로젝트에 메뉴 명령 정의를 더 추가할 수 있습니다. 각 명령은 다음과 같은 특징이 있는 클래스로 정의됩니다.

  • 클래스는 다음과 같이 선언됩니다.

    [LayerDesignerExtension]

    [Export(typeof(ICommandExtension))]

    public class MyLayerCommand : ICommandExtension { ... }

  • 네임스페이스와 클래스의 이름은 중요하지 않습니다.

  • ICommandExtension을 구현하는 메서드는 다음과 같습니다.

    • string Text {get;} - 메뉴에 나타나는 레이블입니다.

    • void QueryStatus(IMenuCommand command) - 사용자가 다이어그램을 마우스 오른쪽 단추로 클릭할 때 호출되며, 사용자의 현재 선택에 대한 명령이 표시되고 사용할 수 있어야 하는지 여부를 결정합니다.

    • void Execute(IMenuCommand command) - 사용자가 명령을 선택할 때 호출됩니다.

  • 현재 선택을 확인하려면 IDiagramContext를 가져오면 됩니다.

    [Import]

    public IDiagramContext DiagramContext { get; set; }

    ...

    DiagramContext.CurrentDiagram.SelectedShapes.Count()...

자세한 내용은 프로그램 코드에서 레이어 모델 탐색 및 업데이트을 참조하십시오.

새 명령을 추가하려면 다음 샘플이 포함된 새 코드 파일을 만든 다음 테스트하고 편집합니다.

using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer;
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation;
using Microsoft.VisualStudio.Modeling.Diagrams.ExtensionEnablement;
using Microsoft.VisualStudio.Modeling.ExtensionEnablement;
using System.ComponentModel.Composition;
using System.Linq;

namespace MyLayerExtension // Change to your preference.
{
  // This is a feature for Layer diagrams:
  [LayerDesignerExtension]
  // This feature is a menu command:
  [Export(typeof(ICommandExtension))]
  // Change the class name to your preference:
  public class MyLayerCommand : ICommandExtension
  {
    [Import]
    public IDiagramContext DiagramContext { get; set; }

    [Import]
    public ILinkedUndoContext LinkedUndoContext { get; set; }

    // Menu command label:
    public string Text
    {
      get { return "Duplicate layers"; }
    }

    // Called when the user right-clicks the diagram.
    // Defines whether the command is visible and enabled.
    public void QueryStatus(IMenuCommand command)
    { 
      command.Visible = 
      command.Enabled = DiagramContext.CurrentDiagram
        .SelectedShapes.Count() > 0;
    }

    // Called when the user selects the command.
    public void Execute(IMenuCommand command)
    {
      // A selection of starting points:
      IDiagram diagram = this.DiagramContext.CurrentDiagram;
      ILayerModel lmodel = diagram.GetLayerModel();
      foreach (ILayer layer in lmodel.Layers)
      { // All layers in model.
      }
      // Updates should be performed in a transaction:
      using (ILinkedUndoTransaction t =
        LinkedUndoContext.BeginTransaction("copy selection"))
      {
        foreach (ILayer layer in 
          diagram.SelectedShapes
            .Select(shape=>shape.GetLayerElement())
            .Where(element => element is ILayer))
        {
          ILayer copy = lmodel.CreateLayer(layer.Name + "+");
          // Position the shapes:
          IShape originalShape = layer.GetShape();
          copy.GetShape().Move(
            originalShape.XPosition + originalShape.Width * 1.2,
            originalShape.YPosition);
        }
        t.Commit();
      }
    }
  }
}

제스처 처리기 정의

제스처 처리기는 사용자가 레이어 다이어그램으로 항목을 끌 때, 그리고 사용자가 다이어그램에서 아무곳이나 더블 클릭할 때 응답 합니다.

기존 명령 또는 제스처 처리기 VSIX 프로젝트에 제스처 처리기를 정의하는 코드 파일을 추가할 수 있습니다.

using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer;
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation;
using Microsoft.VisualStudio.Modeling.Diagrams.ExtensionEnablement;
using Microsoft.VisualStudio.Modeling.ExtensionEnablement;
using System.ComponentModel.Composition;
using System.Linq;
namespace MyLayerExtensions // change to your preference
{
  [LayerDesignerExtension]
  [Export(typeof(IGestureExtension))]
  public class MyLayerGestureHandler : IGestureExtension
  {
  }
}

제스처 처리기에 대한 다음 사항에 유의하십시오.

  • IGestureExtension의 멤버는 다음과 같습니다.

    OnDoubleClick - 사용자가 다이어그램의 아무 곳이나 두 번 클릭할 때 호출됩니다.

    CanDragDrop - 항목을 다이어그램으로 끌어 오는 동안 사용자가 마우스를 이동할 때 반복적으로 호출됩니다. 빠르게 작동해야 합니다.

    OnDragDrop - 사용자가 항목을 다이어그램에 놓을 때 호출됩니다.

  • 각 메서드의 첫 번째 인수는 레이어 요소를 가져올 수 있는 IShape 입니다. 예를 들면 다음과 같습니다.

            public void OnDragDrop(IShape target, IDataObject data)
            {
                ILayerElement element = target.GetLayerElement();
                if (element is ILayer)
                {
                    // ...
                }
            }
    
  • 끌어 온 항목의 일부 형식에 대한 처리기는 이미 정의되어 있습니다. 예를 들어 사용자가 항목을 솔루션 탐색기에서 레이어 다이어그램으로 끌어 올 수 있습니다. 이러한 형식의 항목에 대한 끌기 처리기를 정의할 수는 없습니다. 이러한 경우에는 DragDrop 메서드가 호출되지 않습니다.

다른 항목을 다이어그램으로 끌어 왔을 때 디코딩하는 방법에 대한 자세한 내용은 방법: 모델링 다이어그램의 제스처 처리기 정의을 참조하십시오.

참고 항목

개념

프로그램 코드에서 레이어 모델 탐색 및 업데이트

레이어 다이어그램에 사용자 지정 아키텍처 유효성 검사 추가

방법: 모델링 확장 정의 및 설치