我建立了一个visual studio 2010 UML建模项目,并创建了一个包含几个类的类图。代码生成工作得很好(我使用的是Visual Studio可视化和建模功能包中提供的代码生成模板)。每当我在一个类上点击"生成代码",我就会得到一个很好的类存根,包括这个类的属性和方法存根。
现在我正试图添加一些自定义代码到一个类的方法。我们的想法是,每次为类生成代码时,方法中都已经编写了一些代码(默认情况下,每个方法的内容都是"throw new system . notimplementedexception()")。据我所知,我首先需要创建一个tt/t4模板。然后,我需要在类设计器的方法属性中设置文本模板绑定—它们应该指向新创建的模板。我试过了,但我不知道如何让它工作。还是我误解了一个概念?什么好主意吗?
是的,我已经阅读了msdn关于代码生成和文本模板的文档,以及Oleg Sych的博客。但这两种方法都没有告诉我解决这个问题的方法。
查看如何:从UML类图生成代码这篇文章:它说您需要安装一个Visual Studio Feature Pack来在UML项中获得生成代码命令。据我所知,你需要一个MSDN订阅来获得Feature Pack。所以我不能尝试。
有一节标题为自定义生成的代码命令,它确实建议与UML一起修改默认的T4模板。如果我是你,我没有选择获得MSDN订阅,我会编写一个插件(或VS扩展)并处理UML文件。这将要求您了解UML文件的内部工作原理,以便从UML生成c#。
这是一些*的UML。classdiagram文件。它适用于包含属性(字段)和操作的类。手动从这里开始是一个选项吗?
<?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>