방법: Visual Studio API를 사용하여 UML 모델 열기
Visual Studio API를 사용하여 해당 사용자 인터페이스에서 모델과 다이어그램을 열 수도 있습니다.
모델을 사용자에게 표시하지 않고 프로그램 코드에서만 읽으려는 경우에는 다음 방법을 사용할 수 있습니다.
Visual Studio 모델 버스를 사용하여 모델과 모델 내의 요소에 액세스하고 모델 버스에서 제공하는 표준 방법으로 모델 간의 연결을 만들 수 있습니다. 자세한 내용은 방법: UML 모델을 다른 모델 및 도구와 통합을 참조하십시오.
읽기 전용 모드에서 모델을 열 수 있습니다. 자세한 내용은 방법: 프로그램 코드에서 UML 모델 읽기을 참조하십시오.
Visual Studio에서 모델 및 다이어그램 열기
사용자 인터페이스에서 모델을 열려면 표준 Visual Studio API인 EnvDTE.DTE를 사용합니다. 모델링 프로젝트 항목에 대해 수행할 수 있는 유용한 캐스트 유형으로는 다음 두 가지가 있습니다.
프로젝트가 모델링 프로젝트인 경우와 프로젝트가 현재 AppDomain에 로드되어 있는 경우에 EnvDTE.Project와 IModelingProject 간에 캐스팅할 수 있습니다.
항목이 UML 다이어그램인 경우 EnvDTE.ProjectItem과 IDiagramContext 간에 캐스팅할 수 있습니다.
다음 예제를 실행하려면 프로젝트에서 이러한 참조를 가져와야 합니다.
EnvDTE
Microsoft.VisualStudio.ArchitectureTools.Extensibility
Microsoft.VisualStudio.Modeling.Sdk.12.0
Microsoft.VisualStudio.Modeling.Sdk.Diagrams.12.0
Microsoft.VisualStudio.Shell.Immutable.12.0
Microsoft.VisualStudio.Uml.Interfaces
System.ComponentModel.Composition
이 예제는 Visual Studio에서 UML 모델을 엽니다.
using EnvDTE; // Visual Studio API for loading diagrams
using
using System.ComponentModel.Composition;
using Microsoft.VisualStudio.Modeling;
using Microsoft.VisualStudio.Modeling.ExtensionEnablement;
// for ICommandExtension and other handler types
using Microsoft.VisualStudio.Uml.Classes;
// for basic UML types
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml;
// for model construction methods
using EnvDTE;
using Microsoft.VisualStudio.ArchitectureTools.Extensibility;
Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation;
// for IDiagram
...
Visual Studio 확장에서 이 선언을 통해 호스트 서비스 공급자에 액세스할 수 있습니다.
[Import] public Microsoft.VisualStudio.Shell.SVsServiceProvider ServiceProvider {get;set;}
...
메서드에서 현재 프로젝트 등의 프로젝트에 액세스할 수 있습니다.
DTE dte = (DTE)ServiceProvider.GetService(typeof(DTE));
Project project = dte.ActiveDocument.ProjectItem.ContainingProject;
IModelingProject modelingProject = project as IModelingProject;
if (modelingProject == null) return; // not a modeling project
// Access the model's store and contents.
IModelStore store = modelingProject.Store;
foreach (IElement element in store.Root.OwnedElements) {...}
// Open all the project's diagrams.
foreach (ProjectItem item in project.ProjectItems)
{
IDiagramContext modelingItem = item as IDiagramContext;
if (modelingItem == null)
continue; // not a model diagram
IDiagram diagram = modelingItem.CurrentDiagram;
if (diagram == null)
{
// Diagram is closed. Open it.
item.Open().Activate();
diagram = modelingItem.CurrentDiagram;
}
// Access the shapes.
foreach (IShape<IElement> shape
in diagram.GetChildShapes<IElement>())
{
IElement displayedElement = shape.Element;
...
}
}
}