EnvDTE

2013-01-15 44 views
9

मैं टी -4 का उपयोग कर templating इंटरफेस के लिए EnvDTE का उपयोग कर अपने प्रोजेक्ट में सभी वर्गों की सूची के लिए एक रास्ता बनाने में समस्या हो रही का उपयोग कर एक परियोजना में उपयोगकर्ता वर्गों की सूची एकत्र (नामकरण रिवाजों का पर आधारित), और बाहर प्रलेखन में से कोई भी ऐसा लगता है कि यह कैसे करना है। मैंने इसके साथ शुरुआत की:EnvDTE

<#@ template debug="true" hostspecific="true" language="C#" #> 
<#@ output extension=".cs" #> 
<#@ Assembly name="EnvDTE" #> 
<#@ Assembly name="System.Core" #> 
<#@ import namespace="EnvDTE" #> 
<#@ Import Namespace="System.Linq" #> 
<#@ Import Namespace="System.Collections.Generic" #> 
<# 
    var env = (DTE)((IServiceProvider)this.Host) 
     .GetService(typeof(EnvDTE.DTE)); 

... और फिर मैंने किनारे पर जाना शुरू कर दिया। मैं अपनी परियोजना की पहचान करने में सक्षम हूं, लेकिन मैं इस परियोजना में कक्षाएं एकत्र करने में सक्षम नहीं हूं कि मैं इंटरफेस बनाने के लिए एक फ्लैट सूची में फ़िल्टर करना चाहता हूं।

मैं यह कैसे कर सकता हूं? मैं बस अपनी परियोजना में कक्षाएं चाहता हूँ।

+0

मुझे लगता है कि यह विजुअल स्टूडियो है। यदि हां, तो क्या आपने रोज़लिन को देखा है? – Ameen

+2

मेरा उत्तर यहां देखें http://stackoverflow.com/a/6572941/157224 डीटीई – adrianm

+0

@adrianm के साथ कक्षाएं खोजने के बारे में, ऐसा लगता है कि यह वही हो सकता है जो मैं ढूंढ रहा हूं (एक बार जब मैं सी # में अनुवाद करता हूं) ... मैं सुबह में कोशिश करूँगा। –

उत्तर

10

आप टी -4 का उपयोग कर मैं आप की जाँच सुझाव है कि कर रहे हैं के बाद से tangible T4 Editor। उनकी गैलरी में एक निःशुल्क पुन: प्रयोज्य टेम्पलेट "मूर्त दृश्य स्टूडियो ऑटोमेशन हेल्पर" है। इस टेम्पलेट के साथ आप कोड क्लासेस इत्यादि आसानी से पा सकते हैं। (इस पोस्ट का मेरा उत्तर Design Time Reflection देखें)।

आप इस तरह जारी रखना चाहिए आप अपने दम पर यह करने के लिए करना चाहते हैं:

var project = env.ActiveDocument.ProjectItem.ContainingProject; 
foreach(EnvDTE.CodeElement element in project.CodeModel.CodeElements) 
{ 
    if (element.Kind == EnvDTE.vsCMElement.vsCMElementClass) 
    { 
     var myClass = (EnvDTE.CodeClass)element; 
     // do stuff with that class here 
    } 
} 

मैं प्रत्यावर्तन कि आवश्यक होगा हटा दिया। कोड कोड में अन्य कोड एलिमेंट्स हो सकते हैं। लेकिन इस तरह इसे पढ़ना आसान है।

0

मैं टी -4 टेम्पलेट्स के बारे में ज्यादा पता नहीं है, लेकिन आप एक में Reflection का उपयोग अपनी कक्षा के

उदाहरण पाने के लिए कर सकते हैं:

<#@ template debug="true" hostspecific="true" language="C#" #> 
<#@ output extension=".cs" #> 
<#@ Assembly name="EnvDTE" #> 
<#@ Assembly name="System.Core" #> 
<#@ import namespace="EnvDTE" #> 
<#@ Import Namespace="System.Linq" #> 
<#@ Import Namespace="System.Collections.Generic" #> 
<#@ Import Namespace="System.Reflection" #> 
<# 

    var list = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.IsClass); 
+0

प्रतिबिंब, दुर्भाग्यवश, आत्म-प्रतिबिंबित करने की कोशिश करते समय सभी उत्साहित हो जाते हैं। यह डेटा कैश करता है और जब आप कोड बदलते हैं तो आवश्यक रूप से अपडेट नहीं होता है। –

+0

क्या यह केवल एक टी 4 टेम्पलेट में है, बीक्यूज मैंने कभी भी उस समस्या को –

+0

से पहले कभी नहीं देखा है। –