Procedura: creare un progetto di test in C# per un componente aggiuntivo

Nelle sezioni riportate di seguito viene illustrato come creare ed eseguire un progetto di test in C# relativo a un componente aggiuntivo per l'intercettazione degli eventi in Visual SourceSafe.

Creare un progetto di test in C# per un componente aggiuntivo

Per creare un progetto di test in C# per un componente aggiuntivo in cui venga illustrato come intercettare gli eventi di Visual SourceSafe, effettuare le seguenti operazioni:

  1. Avviare Visual Studio e nella pagina iniziale scegliere Nuovo progetto.

  2. Selezionare Progetti di Visual C# dalla visualizzazione struttura nella parte sinistra della schermata.

  3. Selezionare Libreria di classi come modello di progetto.

  4. Impostare il nome dell'applicazione su VSSEvents, quindi scegliere OK per creare il progetto.

  5. Evidenziare il file Class1.cs in Esplora soluzioni e rinominarlo come IvssEventSample.cs. Eliminare completamente il codice inserito da Visual Studio in questo file.

  6. Nelle proprietà di configurazione del progetto relative alla generazione impostare l'opzione Registra per interoperabilità COM su true.

  7. Per utilizzare il Runtime Callable Wrapper (RCW) per il componente COM SSAPI.DLL, selezionare References nel progetto VSSEvents, quindi fare clic con il pulsante destro del mouse e scegliere Aggiungi riferimento. Assicurarsi che la scheda .NET sia selezionata, quindi utilizzare il pulsante Seleziona per selezionare l'assembly di interoperabilità primario Microsoft.VisualStudio.SourceSafe.Interop.dll di IVSS. Il componente verrà aggiunto all'elenco Componenti selezionati. Scegliere OK.

  8. Per avere accesso alle classi dello spazio dei nomi System.Windows.Forms, selezionare References nel progetto VSSEvents, quindi fare clic con il pulsante destro del mouse e scegliere Aggiungi riferimento. Assicurarsi che la scheda .NET sia selezionata, quindi utilizzare il pulsante Seleziona per selezionare System.Windows.Forms.dll. Il componente verrà aggiunto all'elenco Componenti selezionati. Scegliere OK.

Aggiungere il codice di esempio

Nell'esempio riportato di seguito viene illustrato come intercettare gli eventi di Visual SourceSafe.

  • Incollare il codice riportato di seguito in IvssEventSample.cs:

    using System;
    using System.Runtime.InteropServices;
    using System.Runtime.InteropServices.ComTypes;
    using System.Windows.Forms;
    using Microsoft.VisualStudio.SourceSafe.Interop;
    
    namespace IvssEventSample 
    {
        // Use attributes to declare a fixed Prog ID and Guid for the Add-In.
        [ProgId("Microsoft.SourceSafe.EventSample")]
        [Guid("E1916BD8-A8AA-47b7-A862-C1AF995E64EF")]
        [ComVisible(true)]
        public class IvssEventSample : IVSSEventHandler, IVSSEvents 
        {
            private VSSApp vssApp;
            IConnectionPoint vssEvents;
            int cookie;
    
            public IvssEventSample() 
            {
            }
    
            ~IvssEventSample() 
            {}
    
            public void Init(VSSApp app) 
            {
                MessageBox.Show("Init");
    
                // by saving the VSSApp pointer you can drive the database during events
                this.vssApp = app;
    
                // Wire up the COM connection point manually
                IConnectionPointContainer cpc = (IConnectionPointContainer) app;
                Guid guid = typeof(IVSSEvents).GUID;
                cpc.FindConnectionPoint(ref guid, out vssEvents);
                vssEvents.Advise(this, out cookie);
            }
    
            public void AfterAdd(VSSItem vssItem, string localSpec, string comment) 
            {
                MessageBox.Show("AfterAdd");
            }
    
            public void AfterBranch(VSSItem vssItem, string comment) 
            {
                MessageBox.Show("AfterBranch");
            }
    
            public void AfterCheckin(VSSItem vssItem, string localSpec, string comment) 
            {
                MessageBox.Show("AfterCheckin");
            }
    
            public void AfterCheckout(VSSItem vssItem, string localSpec, string comment) 
            {
                MessageBox.Show("AfterCheckout");
            }
    
            public void AfterEvent(int eventNum, VSSItem vssItem, string str, object var) 
            {
                // Use of this event is deprecated
            }
    
            public void AfterRename(VSSItem vssItem, string oldName) 
            {
                MessageBox.Show("AfterRename");
            }
    
            public void AfterUndoCheckout(VSSItem vssItem, string localSpec) 
            {
                MessageBox.Show("AfterUndoCheckout");
            }
    
            public bool BeforeAdd(VSSItem vssItem, string localSpec, string comment) 
            {
                MessageBox.Show("BeforeAdd");
                return true;
            }
    
            public bool BeforeBranch(VSSItem vssItem, string comment) 
            {
                MessageBox.Show("BeforeBranch");
                return true;
            }
    
            public bool BeforeCheckin(VSSItem vssItem, string localSpec, string comment) 
            {
                MessageBox.Show("BeforeCheckin");
                return true;
            }
    
            public bool BeforeCheckout(VSSItem vssItem, string localSpec, string comment) 
            {
                MessageBox.Show("BeforeCheckout");
                return true;
            }
    
            public bool BeforeEvent(int eventNum, VSSItem vssItem, string str, object var) 
            {
                // Use of this event is deprecated
                return true;
            }
    
            public bool BeforeRename(VSSItem vssItem, string oldName) 
            {
                MessageBox.Show("BeforeRename");
                return true;
            }
    
            public bool BeforeUndoCheckout(VSSItem vssItem, string localSpec) 
            {
                MessageBox.Show("BeforeUndoCheckout");
                return true;
            }
    
            public bool BeginCommand(int unused) 
            {
                // use of this event is deprecated
                return true;
            }
    
            public void EndCommand(int unused) 
            {
                // Use of this event is deprecated
            }
        }
    }
    

Configurare Visual SourceSafe

Per configurare Visual SourceSafe, effettuare le seguenti operazioni:

  1. Creare un file denominato ssaddin.ini che contenga la seguente istruzione:

    Microsoft.SourceSafe.EventSample = 1
    

    Verificare che il ProgID in IvssEventSample.cs sia uguale all'istruzione nel file ssaddin.ini.

  2. Inserire il file nella stessa cartella di ssapi.dll (in genere \Microsoft Visual Studio\VSS\win32).

Eseguire il test dell'applicazione

Per eseguire il test dell'applicazione, effettuare le seguenti operazioni:

  1. Generare la DLL VSSEvents.

  2. Avviare Gestione risorse Visual SourceSafe. Durante l'esecuzione di operazioni per le quali esistono gestori eventi corrispondenti in IvssEventSample.cs dovrebbero essere visualizzate delle finestre di messaggio. Ad esempio, quando si esegue l'estrazione di un file verranno visualizzate due finestre di dialogo, la prima contenente il messaggio "BeforeCheckout" e la seconda contenente il messaggio "AfterCheckout".

Vedere anche

Mostra: