如何:在程序代码中读取 UML 模型
可以使用 UML API 加载 UML 模型及其关系图。
在程序代码中读取模型
若要访问模型的内容,而不在 Visual Studio 窗口中对其进行显示,请使用 ModelingProject.LoadReadOnly()。
例如:
using Microsoft.VisualStudio.Uml.Classes;
// for IElement
using Microsoft.VisualStudio.ArchitectureTools.Extensibility;
// for ModelingProject
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml;
// for IModelStore
...
string projectPath = @"C:\MyProjectFolder\MyProject.modelproj";
using (IModelingProjectReader projectReader =
ModelingProject.LoadReadOnly(projectPath))
{
IModelStore store = projectReader.Store;
foreach (IClass umlClass in store.AllInstances<IClass>())
{
...
}
}
若要读取关系图中的形状,您必须依次读取项目和关系图。
例如:
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation;
// for IDiagram
...
foreach (string diagramFile in projectReader. DiagramFileNames)
{
IDiagram diagram = projectReader.LoadDiagram(diagramFile);
foreach (IShape<IElement> shape
in diagram.GetChildShapes<IElement>())
{ ... }
}
备用方法
对于许多应用程序而言,使用 Visual Studio Modelbus 引用这些应用程序中的模型和元素相对于使用本主题中所述方法执行这一操作,具有更大的可靠性和灵活性。 它提供了在同一模型或不同模型中的任意元素之间建立链接的标准方法。 有关更多信息,请参见如何:将 UML 模型与其他模型和工具集成。
还可以使用 Visual Studio API 在用户界面中打开模型和关系图。 有关更多信息,请参见如何:使用 Visual Studio API 打开 UML 模型。
独立应用程序
上一节中的示例将在 Visual Studio 扩展中起作用。 可以在独立应用程序中读取模型,但必须添加对 Visual Studio 项目的某些引用。
备注
产品的将来版本中可能会更改有关如何在独立应用程序中读取模型的详细信息。当前版本中可访问的某些功能可能会在将来版本中不可用。
添加引用以在独立应用程序中读取模型。
在解决方案资源管理器中,右击在其中生成应用程序的项目,然后单击**“属性”。 在属性编辑器中的“应用程序”选项卡上,将“目标 Framework”**设置为 .NET Framework 4。
添加访问 UML 模型所需的 .NET 引用,该引用通常为:
Microsoft.VisualStudio.Uml.Interfaces.dll
Microsoft.VisualStudio.ArchitectureTools.Extensibility.dll
除了前面各节所列出的引用之外,添加以下来自 \Program Files\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies 的项目引用:
Microsoft.VisualStudio.Uml.dll
Microsoft.VisualStudio.TeamArchitect.ModelStore.Dsl.dll
若要在应用程序中读取关系图,您可能还需要以下引用:
Microsoft.VisualStudio.TeamArchitect.ActivityDesigner.Dsl.dll
Microsoft.VisualStudio.TeamArchitect.ComponentDesigner.Dsl.dll
Microsoft.VisualStudio.TeamArchitect.LogicalClassDesigner.Dsl.dll
Microsoft.VisualStudio.TeamArchitect.SequenceDesigner.Dsl.dll
Microsoft.VisualStudio.TeamArchitect.UseCase.Dsl.dll