Udostępnij za pośrednictwem


Obsługa wyspecjalizowanego wdrożenia

Wdrożenie jest opcjonalną operacją dla projektów. Na przykład projekt internetowy obsługuje wdrożenie, aby umożliwić aktualizacji projektu serwera sieci Web. Podobnie projekt urządzenia inteligentnego obsługuje wdrożenie w celu skopiowania wbudowanej aplikacji na urządzenie docelowe. Podtypy projektu mogą dostarczać wyspecjalizowane zachowanie wdrożenia przez zaimplementowanie interfejsu IVsDeployableProjectCfg . Ten interfejs definiuje kompletny zestaw operacji wdrażania:

Aby obsłużyć wyspecjalizowane wdrożenie według projektu podrzędnego

  • Zaimplementuj metodę rejestrowania AdviseDeployStatusCallback środowiska w celu odbierania powiadomień o zdarzeniach stanu wdrożenia.

    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;
    }
    
    
  • Zaimplementuj metodę UnadviseDeployStatusCallback , aby anulować rejestrację środowiska w celu otrzymywania powiadomień o zdarzeniach stanu wdrożenia.

    public int UnadviseDeployStatusCallback(uint dwCookie)
    {
        adviseSink.RemoveAt(dwCookie);
        return VSConstants.S_OK;
    }
    
    
  • Zaimplementuj metodę Commit , aby wykonać operację zatwierdzania specyficzną dla aplikacji. Ta metoda jest używana głównie na potrzeby wdrażania bazy danych.

    public int Commit(uint dwReserved)
    {
         //Implement commit operation here.
         return VSConstants.S_OK;
    }
    
    
  • Zaimplementuj metodę , Rollback aby wykonać operację wycofywania. Po wywołaniu tej metody projekt wdrożenia musi wykonać odpowiednie czynności, aby wycofać zmiany i przywrócić stan projektu. Ta metoda jest używana głównie na potrzeby wdrażania bazy danych.

    public int Rollback(uint dwReserved)
    {
        //Implement Rollback operation here.
        return VSConstants.S_OK;
    }
    
    
  • Zaimplementuj metodę, QueryStartDeploy aby określić, czy projekt może rozpocząć operację wdrażania.

    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;
    }
    
    
  • Zaimplementuj metodę, QueryStatusDeploy aby określić, czy operacja wdrażania została ukończona pomyślnie.

    public int QueryStatusDeploy(out int pfDeployDone)
    {
        pfDeployDone = 1;
        if (deploymentThread != null && deploymentThread.IsAlive)
            pfDeployDone = 0;
        return VSConstants.S_OK;
    }
    
    
  • Zaimplementuj metodę , StartDeploy aby rozpocząć operację wdrażania w osobnym wątku. Umieść kod specyficzny dla wdrożenia aplikacji wewnątrz Deploy metody .

    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;
    }
    
    
  • Zaimplementuj metodę , StopDeploy aby zatrzymać operację wdrażania. Ta metoda jest wywoływana, gdy użytkownik naciska przycisk Anuluj podczas procesu wdrażania.

    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;
    }
    
    

Uwaga

Wszystkie przykłady kodu podane w tym temacie są częścią większego przykładu w przykładach zestawu VSSDK.