如何:定义用于扩展 UML 的配置文件

在 Visual Studio 旗舰版中,您可以定义“UML 配置文件”,以针对特定目的自定义标准模型元素。 配置文件定义了多个“UML 构造型”。 可以使用构造型扩展元素的属性列表。

在安装 Visual Studio 旗舰版 时安装了多个配置文件。 有关这些配置文件以及如何应用构造型的更多信息,请参见使用配置文件和构造型自定义模型

您可以定义自己的配置文件,以采用 UML 并将其扩展到自己的业务范围或体系结构。 例如:

  • 如果您需要经常定义网站,则可以定义自己的配置文件,其中提供可应用到类图中的类的 «网页» 构造型。 然后您可以使用类图来规划网站。 每个 «网页» 类都具有页面内容、样式等的额外的属性。

  • 如果您需要开发银行软件,则可以定义一个提供 «帐户» 构造型的配置文件。 然后您可以使用类图来定义不同类型的帐户并显示这些帐户之间的关系。

可以将自己的配置文件分发给您的团队。 每个团队成员都可以安装您的配置文件。 这样,团队成员便可以编辑和创建使用其构造型的模型。

提示

如果您在所编辑的模型中应用某个配置文件的构造型,然后与他人共享该模型,则他们应在其自己的计算机上安装同一配置文件。 否则,他们将无法看到您使用的构造型。

配置文件通常是较大 Visual Studio 扩展的一部分。 例如,您可以定义用于将模型的某些部分转换为代码的命令。 您可以定义用户必须应用到他们想转换的包的配置文件。 您将在单个 Visual Studio 扩展中分发您的新命令和该配置文件。

您还可以定义配置文件的本地化变体。 加载您的扩展的用户可以看到适合他们自己的区域的变体。

如何定义配置文件

定义 UML 配置文件

  1. 使用 .profile 文件扩展名创建一个新 XML 文件。

  2. 根据配置文件的结构中所描述的准则添加构造型定义。

  3. 将配置文件添加到 Visual Studio 扩展(.vsix 文件)。 您可以为配置文件创建新扩展,也可以将配置文件添加到现有扩展。

    请参见下一节如何将配置文件添加到 Visual Studio 扩展。

  4. 在您的计算机上安装扩展。

    1. 双击扩展文件,该文件的文件扩展名为 .vsix。

    2. 重新启动 Visual Studio。

  5. 确认已安装配置文件。

    1. 在 UML 资源管理器中选择模型。

    2. 在“属性”窗口中单击**“配置文件”**属性。 配置文件将出现在菜单中。 设置配置文件旁边的复选标记。

    3. 选择一个您的配置文件为其定义构造型的元素。 在“属性”窗口中单击**“构造型”**属性。 您的构造型将出现在列表中。 对照其中一个构造型设置复选标记。

    4. 如果您的配置文件为此构造型定义了其他属性,则可展开构造型属性进行查看。

  6. 将扩展文件发送给 Visual Studio 的其他用户,以将该文件安装到他们的计算机上。

如何将配置文件添加到 Visual Studio 扩展

若要安装某个配置文件并允许您将其发送给其他用户,必须将该配置文件添加到 Visual Studio 扩展。 有关更多信息,请参见 Deploying Visual Studio Extensions(部署 Visual Studio 扩展)。

在新 Visual Studio 扩展中定义配置文件

  1. 创建 Visual Studio 扩展项目。

    提示

    必须已安装 Visual Studio SDK 才能使用此过程。

    1. 在**“文件”菜单上指向“新建”,再单击“项目”**。

    2. 在**“新建项目”对话框的“已安装的模板”下,展开“Visual C#”,单击“扩展性”,再单击“VSIX 项目”。 设置项目名称,然后单击“确定”**。

  2. 将您的配置文件添加到项目中。

    • 在解决方案资源管理器中,右击项目,指向**“添加”,然后单击“现有项”**。 在对话框中找到您的配置文件。
  3. 设置该配置文件的**“复制到输出”**属性。

    1. 在“解决方案资源管理器”中,右击该配置文件,然后单击**“属性”**。

    2. 在“属性”窗口中,将**“复制到输出目录”属性设置为“始终复制”**。

  4. 在“解决方案资源管理器”中,打开 source.extension.vsixmanifest。

    文件将在扩展清单编辑器中打开。

  5. 设置**“ID”“产品名称”**字段。 ID 必须唯一。

  6. 在**“内容”**下,设置一行来描述该配置文件:

    • 单击**“添加内容”。 在“添加内容”**对话框中设置字段,如下所示。

    • 将**“选择内容类型”设置为“自定义扩展类型”**

    • 将**“类型”**设置为 Microsoft.VisualStudio.UmlProfile

    • 单击**“项目中的文件”**并选择配置文件的名称,例如 MyProfile.profile

  7. 生成项目。

  8. 在 Windows 资源管理器中,打开文件夹 .\bin\Debug.\bin\Release 以查找 .vsix 文件。 此文件是 Visual Studio 扩展文件。 可以将该文件安装到您的计算机上,也可将其发送给其他 Visual Studio 用户。

  9. 安装扩展:

    1. 双击 .vsix 文件。 Visual Studio 扩展安装程序将启动。

    2. 重新启动任何正在运行的 Visual Studio 实例。

如果您尚未安装 Visual Studio SDK,则可以使用以下替代过程进行小型扩展。

定义配置文件扩展而不使用 Visual Studio SDK

  1. 创建一个包含下列三个文件的 Windows 目录:

    • 您的配置文件.profile

    • extension.vsixmanifest

    • [Content_Types].xml - 按照下面所示键入此名称,并将名称括在方括号中

  2. 编辑 [Content_Types].xml 以包含下面的文本。 请注意,每个文件扩展名在该文件中都有对应的一项。

    <?xml version="1.0" encoding="utf-8"?>
    <Types xmlns="https://schemas.openxmlformats.org/package/2006/content-types">
      <Default Extension="profile" ContentType="application/octet-stream" />
      <Default Extension="vsixmanifest" ContentType="text/xml" />
    </Types>
    
  3. 复制现有 extension.vsixmanifest 并使用 XML 编辑器进行编辑。 更改“ID”、“名称”和“内容”节点。

    • 您可以在以下目录中找到 extension.vsixmanifest 的示例:

      驱动器**:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Architecture Tools\UmlProfiles**

    • “内容”节点应如下所示:

      <Content>
        <CustomExtension Type="Microsoft.VisualStudio.UmlProfile"
        >YourProfile.Profile</CustomExtension>
      </Content>
      
  4. 将这三个文件压缩到一个 zipped 文件中。

    在 Windows 资源管理器中,选择这三个文件,右击鼠标,指向**“发送到”,然后单击“压缩(zipped)文件夹”**。

  5. 重命名该 zipped 文件,并将其文件扩展名从 .zip 更改为 .vsix。

  6. 若要在具有适当 Visual Studio 版本的任何计算机上安装该配置文件,请双击 .vsix 文件。

从 Visual Studio 扩展安装 UML 配置文件

  1. 在 Windows 资源管理器中双击 .vsix 文件,或者在 Visual Studio 中打开该文件。

  2. 在显示的对话框中,单击**“安装”**。

  3. 若要卸载或临时禁用该扩展,请从**“工具”菜单打开“扩展管理器”**。

如何定义本地化的配置文件

您可以为不同区域性或语言定义不同的配置文件,并将所有配置文件打包到同一扩展中。 当用户加载您的扩展时,他们将会看到您为其区域性定义的配置文件。

您必须始终提供一个默认配置文件。 如果您没有为用户的区域性定义配置文件,则他们将看到该默认配置文件。

定义本地化的配置文件

  1. 按照上面的如何定义配置文件和如何将配置文件添加到 Visual Studio 扩展节所述,创建一个配置文件。 这是默认配置文件,在您未提供本地化的配置文件的任何安装中将用到该配置文件。

  2. 在同一目录中作为默认配置文件添加一个新目录。

    提示

    如果您要使用 Visual Studio 扩展项目生成扩展,则请使用解决方案资源管理器向该项目添加一个新文件夹。

  3. 将新目录的名称更改为本地化区域所对应的 ISO 短代码,例如保加利亚语对应的是 bg,法语对应 fr。 应使用非特定区域性代码(通常为两个字母),而不使用特定区域性代码(如 fr-CA)。 有关区域性代码的更多信息,请参见 CultureInfo.GetCultures method(CultureInfo.GetCultures 方法),其中提供了区域性代码的完整列表。

  4. 将默认配置文件的副本添加到该新目录。 不要更改其文件名。

    示例 Visual Studio 扩展文件夹在生成或压缩到 .vsix 文件之前,将包括下列文件夹和文件:

    extension.vsixmanifest

    MyProfile.profile

    fr\MyProfile.profile

    de\MyProfile.profile

    提示

    不应在 extension.vsixmanifest 中插入对配置文件的本地化版本的引用。 复制的配置文件必须与父文件夹中的配置文件具有相同的名称。

  5. 编辑配置文件的新副本,将用户可看见的所有部分(例如 displayName 特性)转换为目标语言。

  6. 可以根据需要为多个区域性创建附加区域性文件夹和本地化的配置文件。

  7. 通过生成扩展项目或压缩所有文件生成 Visual Studio 扩展,如前面几节所述。

配置文件的结构

可在以下示例中找到 UML 配置文件的 XSD 文件:Setting Stereotypes and Profiles XSD(设置构造型和配置文件 XSD)。 为了帮助您编辑配置文件,请在以下位置安装 .xsd 文件:

%ProgramFiles%\Microsoft Visual Studio 10.0\Xml\Schemas

本节使用 C# 配置文件作为示例。 完整的配置文件定义位于:

驱动器**:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Architecture Tools\UmlProfiles\CSharp.profile**

此路径的开头部分在安装中可能有所不同。

有关 .NET 配置文件的更多信息,请参见 UML 模型的标准构造型

UML 配置文件定义的主要节

每个配置文件都包含以下内容:

<?xml version="1.0" encoding="utf-8"?>
<profile dslVersion="1.0.0.0" 
       name="CSharpProfile" displayName="C# Profile" 
       xmlns="https://schemas.microsoft.com/UML2.1.2/ProfileDefinition">
  <stereotypes>...</stereotypes>
  <metaclasses>...</metaclasses>
  <propertyTypes>...</propertyTypes>
</profile>

提示

称为 name 的特性不得包含空格或标点。 显示在用户界面中的特性 displayName 应为有效的 XML 字符串。

每个配置文件都包含三个主要节。 按照相反顺序,这三个节如下所示:

  • <propertyTypes> - 用于构造型节中定义的属性的类型列表。

  • <metaclasses> - 此配置文件中的构造型应用到的模型元素类型(如 IClass、IInterface、IOperation 和 IDependency)列表。

  • <stereotypes> - 构造型定义。 每个定义都包括添加到目标模型元素的属性的名称和类型。

属性类型

<propertyTypes> 节声明用于 <stereotypes> 节中的属性的类型列表。 属性类型有两种:外部和枚举。

外部类型声明标准 .NET 类型的完全限定名:

<externalType name="System.String" />

枚举类型定义一组文本值:

    <enumerationType name="PackageVisibility">
      <enumerationLiterals>
        <enumerationLiteral name="internal" displayName="internal"  />
        <enumerationLiteral name="protectedinternal" displayName="protected internal" />
      </enumerationLiterals>
    </enumerationType>

元类

<metaclasses> 节是此配置文件中的构造型可以定义为的模型元素类型的列表。

<metaclass 
      name="Microsoft.VisualStudio.Uml.Classes.IClass" />
<metaclass
      name="Microsoft.VisualStudio.Uml.Classes.IInterface" />
<metaclass
      name="Microsoft.VisualStudio.Uml.Components.IComponent" />

有关可用作元类的模型元素和关系类型的完整列表,请参见模型元素类型。

构造型定义

<stereotypes> 节包含一个或多个构造型定义:

    <stereotype name="CSharpClass" displayName="C# Class"> ...

每个构造型都列出了它可应用到的一个或多个模型元素或关系类型。 您可以指定基类型的名称以包括其所有派生类型。 例如,如果指定 Microsoft.VisualStudio.Uml.Classes.IType,则构造型可以应用到元素的 IClass、IInterface、IEnumeration 以及多个其他类型。

      <metaclasses>
        <metaclassMoniker name=
         "/CSharpProfile/Microsoft.VisualStudio.Uml.Classes.IClass" />
      </metaclasses>

metaclassMoniker 的 name 特性是一个指向 <metaClasses> 节中某个元素的链接。

提示

名字对象的名称必须以 /yourProfileName/ 开头,其中 yourProfileName 是在配置文件(此示例中为“CSharpProfile”)的 name 特性中定义的。 名字对象以 metaclasses 节中的某个项的名称结尾。

每个构造型都可以列出零个或多个属性,该构造型将这些属性添加到它所应用到的任何模型元素。 <propertyType> 包含指向 <propertyTypes> 节中定义的某个类型的链接。 该链接必须为用于引用 <externalType>, 的 <externalTypeMoniker>,或为用于引用 <enumerationType> 的 <enumerationTypeMoniker>。 再次强调,该链接以您的配置文件的名称开头。

      <properties>
        <property name="IsStatic" 
                displayName="Is Static" defaultValue="false">
          <propertyType>
    <externalTypeMoniker 
                   name="/CSharpProfile/System.Boolean" />
          </propertyType>
        </property>
        <property name="PackageVisibility" 
                  displayName="Package Visibility"
                  defaultValue="internal">
          <propertyType>
            <enumerationTypeMoniker 
                  name="/CSharpProfile/PackageVisibility"/>
          </propertyType>
        </property>
      </properties>
    </stereotype>

模型元素类型

模型元素类型中列出了可以为其定义构造型的类型集。

疑难解答

  • 构造型未显示 UML 模型。
    必须在包或模型中选择配置文件。 然后,构造型将显示在包或模型内部的元素上。 有关更多信息,请参见如何:向模型元素添加构造型

  • 打开 UML 模型时出现以下错误:VS1707: The following profiles cannot be loaded because a serialization error occurred: MyProfile.profile

    1. 验证 .profile 的基本 XML 语法是否正确。

    2. 确保每个名字对象名称的格式为 /profileName/nodeName。 profileName 是根配置文件节点中的 name 特性的值。 nodeName 是 metaclass、externalType 或 enumerationType 的 name 特性的值。

    3. 确保语法与此处所述和 驱动器**:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Architecture Tools\UmlProfiles\** 中所示的语法一致。

    4. 卸载有错误的扩展。 在“工具”菜单上,单击“扩展管理器”。

      • 如果未显示该扩展,请查看下一个项。
    5. 重新生成 VSIX 文件,然后在 Windows 资源管理器中打开该文件以将其重新安装。 重新启动 Visual Studio。

  • 扩展管理器中未显示该扩展,而当您尝试重新安装它时,会出现以下消息:The extension is already installed to all applicable products.

    1. 从 LocalAppData\Microsoft\VisualStudio\10.0\Extensions\ 的子文件夹中移除该扩展文件。

      • 若要查看 LocalAppData,您必须在 Windows 资源管理器“文件夹选项”的“查看”选项卡中设置“显示隐藏文件和文件夹”。

      • LocalAppData 通常位于 C:\Users\用户名\AppData\Local\ 中。

    2. 重新启动 Visual Studio。

请参见

任务

如何:向模型元素添加构造型

概念

UML 模型的标准构造型

其他资源

使用配置文件和构造型自定义模型

Sample: Color UML Elements by Stereotype(示例:根据构造型设置 UML 元素的颜色)

Sample: Setting Stereotypes, Profiles XSD(示例:设置构造型、配置文件 XSD)