2011-12-27 88 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

相關問題