2011-12-27 89 views
2

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

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

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

+0

对不起,我帮不了你,因为我没有MSDN订阅(见我为什么这是相关的答案,),但我会问你有什么打算在你的自定义代码生成器呢? – Mzn 2012-01-02 17:08:57

+0

我有一个有效的Visual Studio终极版。代码生成工作正常。但是当我生成代码时,我只能得到一个非常基本的类 - 例如生成的方法只是存根,根本没有任何代码。当我开始为我的模型生成代码时,我想使用TT/T4模板绑定来填充这些方法的一些代码。 – Andreas 2012-01-03 13:39:08

+0

你有没有考虑过这个问题:[用Visual Studio 2010 UML建模代码存根](http://stackoverflow.com/questions/1269414/code-stubbing-with-visual-studio-2010-uml-modeling) – kmote 2012-02-15 19:27:24

回答

1

查看本文列出How to: Generate Code from UML Class Diagrams:它表示您需要安装Visual Studio功能包才能在UML项目中获取生成代码命令。就我所知,您需要订阅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> 
+0

视觉特征包安装在我的机器上。另外,我拥有Visual Studio Ultimate Edition的有效许可证。所有必要的产品都安装在我的电脑上。代码生成工作正常。但是我只能得到一个非常基础的类 - 例如生成的方法根本没有任何代码。当我开始为我的模型生成代码时,我想使用TT/T4模板绑定来填充这些方法的一些代码。 – Andreas 2012-01-03 13:33:43

+0

你得到的最基本的类是使用默认的T4文件生成的。我发布的链接(如何从上面的UML生成代码)包含有关如何获取默认T4文件以及如何定制它们以满足您的需求的信息。这对你有帮助吗?你在做什么是非常有趣的顺便说一句。 – Mzn 2012-01-03 15:18:30

+0

你有没有考虑编辑默认的T4? – Mzn 2012-01-06 06:03:17

相关问题