Freigeben über


Behandeln von spezialisierten Bereitstellungen

Eine Bereitstellung ist ein optionaler Vorgang für Projekte. Ein Webprojekt unterstützt z. B. eine Bereitstellung, damit ein Projekt einen Webserver aktualisieren kann. Ebenso unterstützt ein Smart Device-Projekt eine Bereitstellung, um eine integrierte Anwendung auf das Zielgerät zu kopieren. Project-Untertypen können spezielles Bereitstellungsverhalten bereitstellen, indem sie die IVsDeployableProjectCfg Schnittstelle implementieren. Diese Schnittstelle definiert einen vollständigen Satz von Bereitstellungsvorgängen:

So behandeln Sie eine spezielle Bereitstellung durch ein Untertypprojekt

  • Implementieren Sie die AdviseDeployStatusCallback Methode, um die Umgebung zu registrieren, um Benachrichtigungen über Bereitstellungsstatusereignisse zu erhalten.

    private Microsoft.VisualStudio.Shell.EventSinkCollection adviseSink = new Microsoft.VisualStudio.Shell.EventSinkCollection();
    public int AdviseDeployStatusCallback(IVsDeployStatusCallback pIVsDeployStatusCallback,
                                          out uint pdwCookie)
    {
        if (pIVsDeployStatusCallback == null)
            throw new ArgumentNullException("pIVsDeployStatusCallback");
    
        pdwCookie = adviseSink.Add(pIVsDeployStatusCallback);
        return VSConstants.S_OK;
    }
    
    
  • Implementieren Sie die UnadviseDeployStatusCallback Methode, um die Registrierung der Umgebung abzubrechen, um Benachrichtigungen über Bereitstellungsstatusereignisse zu erhalten.

    public int UnadviseDeployStatusCallback(uint dwCookie)
    {
        adviseSink.RemoveAt(dwCookie);
        return VSConstants.S_OK;
    }
    
    
  • Implementieren Sie die Commit Methode, um den commit-Vorgang speziell für Ihre Anwendung auszuführen. Diese Methode wird Standard für die Datenbankbereitstellung verwendet.

    public int Commit(uint dwReserved)
    {
         //Implement commit operation here.
         return VSConstants.S_OK;
    }
    
    
  • Implementieren Sie die Rollback Methode zum Ausführen eines Rollbackvorgangs. Wenn diese Methode aufgerufen wird, muss das Bereitstellungsprojekt alle geeigneten Aktionen ausführen, um Änderungen zurückzusetzen und den Status des Projekts wiederherzustellen. Diese Methode wird Standard für die Datenbankbereitstellung verwendet.

    public int Rollback(uint dwReserved)
    {
        //Implement Rollback operation here.
        return VSConstants.S_OK;
    }
    
    
  • Implementieren Sie die QueryStartDeploy Methode, um zu bestimmen, ob ein Projekt einen Bereitstellungsvorgang starten kann.

    public int QueryStartDeploy(uint dwOptions, int[] pfSupported, int[] pfReady)
    {
        if (pfSupported != null && pfSupported.Length >0)
            pfSupported[0] = 1;
        if (pfReady != null && pfReady.Length >0)
        {
            pfReady[0] = 0;
            if (deploymentThread != null && !deploymentThread.IsAlive)
                pfReady[0] = 1;
        }
        return VSConstants.S_OK;
    }
    
    
  • Implementieren Sie die QueryStatusDeploy Methode, um festzustellen, ob ein Bereitstellungsvorgang erfolgreich abgeschlossen wurde.

    public int QueryStatusDeploy(out int pfDeployDone)
    {
        pfDeployDone = 1;
        if (deploymentThread != null && deploymentThread.IsAlive)
            pfDeployDone = 0;
        return VSConstants.S_OK;
    }
    
    
  • Implementieren Sie die StartDeploy Methode, um einen Bereitstellungsvorgang in einem separaten Thread zu starten. Platzieren Sie den codespezifischen Code für die Bereitstellung Ihrer Anwendung in der Deploy Methode.

    public int StartDeploy(IVsOutputWindowPane pIVsOutputWindowPane, uint dwOptions)
    {
        if (pIVsOutputWindowPane == null)
            throw new ArgumentNullException("pIVsOutputWindowPane");
    
        if (deploymentThread != null && deploymentThread.IsAlive)
            throw new NotSupportedException("Cannot start deployment operation when it is already started; Call QueryStartDeploy first");
    
        outputWindow = pIVsOutputWindowPane;
    
        // Notify that deployment is about to begin and see if any user wants to cancel.
        if (!NotifyStart())
            return VSConstants.E_ABORT;
    
        operationCanceled = false;
    
        // Create and start our thread
        deploymentThread = new Thread(new ThreadStart(this.Deploy));
        deploymentThread.Name = "Deployment Thread";
        deploymentThread.Start();
    
        return VSConstants.S_OK;
    }
    
    
  • Implementieren Sie die StopDeploy Methode, um einen Bereitstellungsvorgang zu beenden. Diese Methode wird aufgerufen, wenn ein Benutzer während des Bereitstellungsprozesses die Schaltfläche "Abbrechen " drückt.

    public int StopDeploy(int fSync)
    {
        if (deploymentThread != null && deploymentThread.IsAlive)
            return VSConstants.S_OK;
    
        outputWindow.OutputStringThreadSafe("Canceling deployment");
        operationCanceled = true;
        if (fSync != 0)
        {
            // Synchronous request, wait for the thread to terminate.
            if (!deploymentThread.Join(10000))
            {
                Debug.Fail("Deployment thread did not terminate before the timeout, Aborting thread");
                deploymentThread.Abort();
            }
        }
    
        return VSConstants.S_OK;
    }
    
    

Hinweis

Alle codebeispiele in diesem Thema sind Teile eines größeren Beispiels in VSSDK-Beispielen.