Sdílet prostřednictvím


Zpracování specializovaného nasazení

Nasazení je volitelná operace pro projekty. Například webový projekt podporuje nasazení, které umožňuje aktualizaci webového serveru projektu. Podobně projekt inteligentního zařízení podporuje nasazení pro kopírování sestavené aplikace do cílového zařízení. Podtypy projektu můžou poskytovat specializované chování nasazení implementací IVsDeployableProjectCfg rozhraní. Toto rozhraní definuje úplnou sadu operací nasazení:

Zpracování specializovaného nasazení pomocí projektu podtypu

  • Implementujte metodu AdviseDeployStatusCallback pro registraci prostředí pro příjem oznámení o událostech stavu nasazení.

    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;
    }
    
    
  • Implementujte metodu UnadviseDeployStatusCallback zrušení registrace prostředí pro příjem oznámení o událostech stavu nasazení.

    public int UnadviseDeployStatusCallback(uint dwCookie)
    {
        adviseSink.RemoveAt(dwCookie);
        return VSConstants.S_OK;
    }
    
    
  • Implementujte metodu Commit pro provedení operace potvrzení specifické pro vaši aplikaci. Tato metoda se používá hlavně pro nasazení databáze.

    public int Commit(uint dwReserved)
    {
         //Implement commit operation here.
         return VSConstants.S_OK;
    }
    
    
  • Implementujte metodu Rollback pro provedení operace vrácení zpět. Při zavolání této metody musí projekt nasazení provést cokoli, co je vhodné vrátit změny a obnovit stav projektu. Tato metoda se používá hlavně pro nasazení databáze.

    public int Rollback(uint dwReserved)
    {
        //Implement Rollback operation here.
        return VSConstants.S_OK;
    }
    
    
  • Implementujte metodu QueryStartDeploy , která určuje, jestli je projekt schopen spustit operaci nasazení.

    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;
    }
    
    
  • Implementujte metodu QueryStatusDeploy , která určuje, zda byla operace nasazení úspěšně dokončena.

    public int QueryStatusDeploy(out int pfDeployDone)
    {
        pfDeployDone = 1;
        if (deploymentThread != null && deploymentThread.IsAlive)
            pfDeployDone = 0;
        return VSConstants.S_OK;
    }
    
    
  • Implementujte metodu StartDeploy pro zahájení operace nasazení v samostatném vlákně. Do metody umístěte kód specifický pro nasazení Deploy vaší aplikace.

    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;
    }
    
    
  • Implementujte metodu StopDeploy pro zastavení operace nasazení. Tato metoda se volá, když uživatel během procesu nasazení stiskne tlačítko Storno .

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

Poznámka:

Všechny příklady kódu uvedené v tomto tématu jsou součástí většího příkladu v ukázkách VSSDK.