Visual Studio UML 2010代码生成方法或属性

时间:2011-12-27 11:19:23

标签: c# .net visual-studio-2010 uml code-generation

我建立了一个visual studio 2010 UML建模项目,并创建了一个包含多个类的类图。代码生成工作正常(我使用Visual Studio的可视化和建模功能包中提供的代码生成模板)。 每当我在类上单击“生成代码”时,我会得到一个很好的类存根,包括此类的属性和方法存根。

现在我尝试将一些自定义代码添加到类的方法中。我的想法是每次为类生成代码时,方法都会在其中编写一些代码(默认情况下,每个方法的内容都是“throw new Sytem.NotImplementedException()”)。据我所知,我首先需要创建一个tt / t4模板。然后我需要在类设计器中设置文本模板绑定方法的属性 - 它们应该指向新创建的模板。我尝试过,但我无法弄清楚如何使这个工作。或者我在这里误解了一个概念?有什么想法吗?

是的,我已经阅读了有关代码生成和文本模板的msdn文档,以及Oleg Sych的博客。但这些都没有向我展示解决这个问题的方法。

1 个答案:

答案 0 :(得分:1)

查看本文How to: Generate Code from UML Class Diagrams:它表示您需要安装Visual Studio Feature Pack才能在UML项目中获取Generate Code命令。据我所知,您需要MSDN订阅才能获得该功能包。所以我无法尝试。

有一个名为Customizing the Generated Code Command的部分,它确实建议结合使用UML来修改默认的T4模板。 如果我是你,我没有选择获得MSDN订阅,我会写一个加载项(或VS扩展名)并处理UML文件。这需要您了解UML文件的内部工作,以便从UML生成C#。

这是一些* .classdiagram文件的UML。它适用于包含属性(字段)和操作的类。从这里手动启动选项吗?

<?xml version="1.0" encoding="utf-8"?>
<logicalClassDesignerModel xmlns:dm0="http://schemas.microsoft.com/VisualStudio/2008/DslTools/Core" xmlns:dm1="http://schemas.microsoft.com/dsltools/Kernel" xmlns:dm2="http://schemas.microsoft.com/dsltools/Component" xmlns:dm3="http://schemas.microsoft.com/dsltools/Activity" xmlns:dm4="http://schemas.microsoft.com/dsltools/Interaction" xmlns:dm5="http://schemas.microsoft.com/dsltools/UseCase" xmlns:dm6="http://schemas.microsoft.com/dsltools/UmlModelLibrary" xmlns:dm7="http://schemas.microsoft.com/dsltools/UmlDiagrams" xmlns:dm8="http://schemas.microsoft.com/dsltools/ModelStore" dslVersion="1.0.0.0" Id="0b035e1e-cf78-4d7b-a9c5-7ae15e246642" name="UMLClassDiagram1" linkedPackageId="30fb2a44-daa7-48cf-a306-c91b92f1dd7b" xmlns="http://schemas.microsoft.com/dsltools/LogicalClassDesigner">
  <packagedElements>
    <logicalClassDesignerModelHasTypes>
      <class Id="5d701b74-ed36-4baa-8318-0406964414ce" name="Class1" isAbstract="false" isLeaf="false" isActiveClass="false">
        <elementDefinition Id="82f92ae7-5d9b-4e64-8497-39c686ce2e5d" />
        <ownedAttributesInternal>
          <property Id="06827ace-592e-4cf7-bc13-946f073f2b73" name="Attribute2" isLeaf="false" isStatic="false" isReadOnly="false" isDerived="false" isDerivedUnion="false" aggregation="None" isComposite="false">
            <elementDefinition Id="3ebbef23-6573-42bf-8542-a3504f1ef28a" />
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation Id="c061b4ea-9880-4674-8775-a7b360a2791d" name="Operation1" isLeaf="false" isStatic="false" isAbstract="false" concurrency="Sequential" isQuery="false">
            <elementDefinition Id="fe154244-f792-415d-8ebc-50d5e3a13362" />
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter Id="6cbf9775-608c-4a1c-bd17-14397c5ce0f3" direction="Return">
                  <elementDefinition Id="f9eabe6e-f42c-4ece-a0fc-6da2a5da11f0" />
                  <type_NamedElement>
                    <referencedTypeMoniker Id="7acb8bf9-6778-42b4-949c-5fbb1ed0a9bc" LastKnownName="String" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </logicalClassDesignerModelHasTypes>
    <packageHasNamedElement>
      <referencedType Id="7acb8bf9-6778-42b4-949c-5fbb1ed0a9bc" name="String" isAbstract="false" isLeaf="false" cachedFullName="String">
        <elementDefinition Id="59259974-6d55-42c6-b7bd-763d77ac8ef9" />
      </referencedType>
    </packageHasNamedElement>
  </packagedElements>
  <package Id="30fb2a44-daa7-48cf-a306-c91b92f1dd7b" name="ModelingProject1">
    <elementDefinition Id="7c93d198-9011-4ef0-b6ba-9bd438a05ad5" />
    <profileInstances>
      <packageHasProfileInstances Id="d0a13992-851d-423d-916d-e1976a34f3f6">
        <profileInstance Id="c7f4eecf-37de-4fb2-b7fa-14747958e8cd" name="StandardProfileL2">
          <elementDefinition Id="e34d544e-0fea-4ed6-ac5e-1b74119ac791" />
        </profileInstance>
        <elementDefinition Id="0caec977-1f8c-4ba3-a7db-8cc9ad9cc73b" />
      </packageHasProfileInstances>
      <packageHasProfileInstances Id="3b4e12c7-adee-45b2-a675-bca964c11f99">
        <profileInstance Id="c9e7d01a-6aa0-4697-8877-cdafc408d6ca" name="StandardProfileL3">
          <elementDefinition Id="532ea607-fb19-44b8-8502-3351b05452be" />
        </profileInstance>
        <elementDefinition Id="29349502-908c-4fda-9054-c48619c59ed0" />
      </packageHasProfileInstances>
    </profileInstances>
  </package>
</logicalClassDesignerModel>
相关问题