7

से कोड जेनरेट करें मेरे पास एक प्रोजेक्ट है जो मेटाडेटा के आधार पर पाठ उत्पन्न करता है (एक इंटरफ़ेस और क्लास का प्रतिनिधित्व करता है)। मैं इस जेनरेट कोड को लेना चाहता हूं और इसे एक विशिष्ट प्रोजेक्ट और डायरेक्टरी के तहत वर्तमान में खोले गए समाधान में सीधे एक नई कक्षा और इंटरफ़ेस के रूप में डालना चाहता हूं। मैं मेनू उपकरण है जो वर्ग उत्पन्न होगा पैदा करेगा लेकिन मुझे पता है कि नहीं कैसे करना है अपने कस्टम दृश्य स्टूडियो एक्सटेंशन के भीतर से निम्न आइटम को लाभ पहुंच है:विजुअल स्टूडियो एक्सटेंशन

  1. दोहराएं वर्तमान समाधान और एक परियोजना को खोजने जेनरेट कोड को डंप करने के लिए।
  2. विजुअल स्टूडियो के भीतर एक नई फ़ाइल विंडो खोलें और जेनरेट किए गए टेक्स्ट को इंजेक्ट करें जो मेरे टूल से सीधे उस विंडो में आता है।
  3. मेरे कस्टम एक्सटेंशन के भीतर से मौजूदा समाधान के भीतर किसी विशिष्ट प्रोजेक्ट में एक नया फ़ोल्डर बनाएं।

संपादित करें - मैं एक नया फ़ाइल को खोलने की जरूरत है स्पष्ट करने के लिए (उदाहरण के लिए सही एक परियोजना पर क्लिक करें -> जोड़ें -> न्यू क्लास) और अपने कस्टम दृश्य स्टूडियो एक्सटेंशन के भीतर से इसे में पाठ सम्मिलित करें।

धन्यवाद

+1

आप टी -4 टेम्पलेट का उपयोग कर एक विस्तार के बजाय विचार किया है? आप अपने मेटा डेटा को .config फ़ाइल में XML के रूप में बना सकते हैं और प्रत्येक वर्ग/इंटरफ़ेस उत्पन्न करने के लिए T4 टेम्पलेट चला सकते हैं। यह केवल 1-1 मेटा से उत्पन्न मैपिंग पर काम करता है। – DaveShaw

+0

हां, मैं वास्तव में कोड उत्पन्न करने के लिए टी 4 टेम्पलेट का उपयोग कर रहा हूं, लेकिन ये वर्ग डेटाबेस के भीतर मेटाडेटा से उत्पन्न होते हैं, इसलिए मैं नहीं चाहता कि वे किसी प्रोजेक्ट के अंदर मौजूद हों, मैं उपयोगकर्ता को यह कहने में सक्षम होना चाहता हूं कि किस वर्ग प्रकार वे चाहते हैं और फिर मैं कोड उत्पन्न करता हूं (टी 4 का उपयोग करके) और एक वर्ग और इंटरफ़ेस को पाठ के रूप में वापस कर देता हूं, जो मुझे उपरोक्त प्रश्नों पर छोड़ देता है। –

+0

टी 4 टेम्पलेट को उसी स्थान पर रखना समझ में आता है जहां आप जेनरेट कोड का उपयोग करेंगे। – StingyJack

उत्तर

10

एक दृश्य स्टूडियो एक्सटेंशन (ToolWindowPane) से एक नया फ़ाइल बनाने के लिए पहले GetService विधि का उपयोग करें:

// Get an instance of the currently running Visual Studio IDE 
DTE dte = (DTE)GetService(typeof(DTE)); 

दूसरा, यह सुनिश्चित करें कि एक समाधान, वर्तमान में खुले है अगर कोई समाधान नहीं खुला है फ़ाइल पीढ़ी काम नहीं करेगा:

string solutionDir = System.IO.Path.GetDirectoryName(dte.Solution.FullName); 

तीसरा, DTE वस्तु से नए फाइल उत्पन्न:

0,123,
dte.ItemOperations.NewFile(@"General\Visual C# Class", "ObjectOne", EnvDTE.Constants.vsViewKindTextView); 

बनाने नई फ़ाइल अपने उत्पन्न पाठ के साथ उस फ़ाइल का पाठ पहुँच सकते हैं और इसे बदलना निम्नलिखित कोड का उपयोग करने के बाद:

TextSelection txtSel = (TextSelection)dte.ActiveDocument.Selection; 
TextDocument txtDoc = (TextDocument)dte.ActiveDocument.Object(""); 

txtSel.SelectAll(); 
txtSel.Delete(); 
txtSel.Insert("Hello World"); 
+0

जेनरेटेड फ़ाइल को कैसे सहेजने के बिना संवाद (चुप बचाने) को सहेजने के लिए और आइटम के रूप में समाधान में जोड़ें? – Gayan