2010-08-12 6 views
5

क्या कोई भी विजुअल स्टूडियो ऐड-इन में समाधान या प्रोजेक्ट इवेंट जैसे प्रोजेक्ट एडक्ड जोड़ने के लिए सबसे अच्छी जगह सुझा सकता है?मुझे अपने विजुअल स्टूडियो एड-इन में समाधान या प्रोजेक्ट इवेंट्स कहां संलग्न करना चाहिए?

यदि ऐड-इन कनेक्ट होने पर मैं ऐसा करता हूं तो कोई समाधान लोड नहीं होता है, तो समाधान कैसे लोड किया जा सकता है, तो मैं कैसे कह सकता हूं?

उदाहरण के लिए, यदि मैं प्रोजेक्ट आइटम को जोड़ने के लिए एक ईवेंट लिखता हूं, तो मुझे इसे कहां संलग्न करना चाहिए? कार्यक्रम को परियोजना द्वारा निकाल दिया जाएगा, और इसके परिणामस्वरूप, इसलिए जब ऐड-इन कनेक्ट होता है तो मैं ईवेंट को संलग्न नहीं कर सकता क्योंकि एड-इन कनेक्ट होने पर कोई समाधान नहीं होता है।

दूसरी तरफ, यदि मैं उन्हें एक्ज़ेक() ईवेंट में जोड़ता हूं तो मुझे जांच करने की ज़रूरत है जैसे कि ईवेंट पहले से जुड़ा हुआ है, और मुझे यकीन है कि कनेक्शन के बीच कभी-कभी एक साफ-सुथरा तरीका होना चाहिए घटनाओं और Exec() घटना।

उत्तर

5

आप शायद इस बहुत पहले पता लगा है, लेकिन वैसे भी: आप OnConnection के भीतर से अपने घटनाओं सेटअप कर सकते हैं नीचे दिखाया गया है की तरह, यह एक ऐड के कनेक्ट वर्ग का एक टुकड़ा है (यदि आप ग # का उपयोग कर रहे कल्पना करते हुए):

using System; 
using System.Globalization; 
using System.Reflection; 
using System.Resources; 
using EnvDTE; 
using EnvDTE80; 
using Extensibility; 
using Microsoft.VisualStudio.CommandBars; 

namespace MyAddin1 
{ 
    /// <summary>The object for implementing an Add-in.</summary> 
    /// <seealso class='IDTExtensibility2' /> 
    public class Connect : IDTExtensibility2, IDTCommandTarget 
    { 
    private DTE2 _applicationObject; 
    private AddIn _addInInstance; 
    private SolutionEvents _solutionEvents; 

    public void OnConnection(object application, ext_ConnectMode connectMode, 
      object addInInst, ref Array custom) 
    { 
     _applicationObject = (DTE2)application; 
     _addInInstance = (AddIn)addInInst; 

     // check the value of connectMode here, depending on your scenario 
     if(connectMode == ...) 
     SetupEvents(); 
    } 

    private void SetupEvents() 
    { 
     // this is important ... 
     _solutionEvents = _applicationObject.Events.SolutionEvents; 

     // wire up the events you need 
     _solutionEvents.Opened += new _dispSolutionEvents_OpenedEventHandler(_solutionEvents_Opened); 
     _solutionEvents.AfterClosing += new _dispSolutionEvents_AfterClosingEventHandler(_solutionEvents_AfterClosing); 
     _solutionEvents.ProjectAdded += new _dispSolutionEvents_ProjectAddedEventHandler(_solutionEvents_ProjectAdded); 
    } 

    // add procedures to handle the events here, plus any other 
    // handling you need, ie. OnDisconnection and friends 
} 

मुख्य बिंदु यह है कि समाधान और परियोजना की घटनाओं को तारित करने के लिए, यह महत्वपूर्ण नहीं है कि कोई समाधान या प्रोजेक्ट पहले ही लोड हो। वे किसी विशेष समाधान या प्रोजेक्ट से जुड़े नहीं हैं, वे विजुअल स्टूडियो ऑब्जेक्ट मॉडल द्वारा प्रदान किए जाते हैं और नेमस्पेस के भीतर एम्बेडेड हैं।

वैसे भी कुछ और करने के लिए यह अधिक समझ नहीं आता है, क्योंकि जब आप वीएस शुरू करते हैं तो लोड करने के लिए एक एडिन कॉन्फ़िगर कर सकते हैं, और इस मामले में कभी भी कोई समाधान/परियोजनाएं लोड नहीं होंगी।

कुछ कैच हालांकि बताया गया है:

  • यह महत्वपूर्ण है कि आप अपने कनेक्ट वर्ग के भीतर एक सदस्य चर के रूप में SolutionEvents वर्ग के लिए एक संदर्भ रखने के लिए, अन्यथा the events will never fire, (see also here) है।
  • आपको यह सुनिश्चित करने की ज़रूरत है कि आप connectMode पैरामीटर को OnConnection पर पारित करें। इसे विभिन्न मानकों के साथ कई बार बुलाया जाता है, और यदि आप इसे गलत तरीके से करते हैं तो आप ईवेंट को कई बार वायर्ड कर सकते हैं, जो निश्चित रूप से एक समस्या होगी। इसके अलावा, आमतौर पर मेनू और सामान जैसी कोई भी एडिन आईडीई OnConnection के भीतर से स्थापित की जाती है, ताकि यदि आप इसे सही नहीं करते हैं तो आप डुप्लिकेट मेनू आइटम के साथ समाप्त हो सकते हैं।

यहाँ कुछ संकेत दिए गए है, प्रदान की कोड के कुछ VB कोड है, मामले में आपको लगता है कि के लिए देख रहे:

अंत में, यहां लेखों की एक सूची है, उनमें से लगभग 70% एडिन के संबंध में बुनियादी और उन्नत विषयों को कवर करते हैं:

अनुभाग हकदार MZ-उपकरण लेख श्रृंखला (के बारे में ऐड-इन्स) और वहाँ क्या कवर किया है पर एक नजर है ढूंढें।

संबंधित मुद्दे