Partager via


Gérer le déploiement spécialisé

Un déploiement est une opération facultative pour les projets. Un projet web, par exemple, prend en charge un déploiement pour permettre à un projet de mettre à jour un serveur web. De même, un projet Smart Device prend en charge un déploiement pour copier une application générée sur l’appareil cible. Les sous-types de projet peuvent fournir un comportement de déploiement spécialisé en implémentant l’interface IVsDeployableProjectCfg . Cette interface définit un ensemble complet des opérations de déploiement :

Pour gérer un déploiement spécialisé par un projet de sous-type

  • Implémentez la AdviseDeployStatusCallback méthode pour inscrire l’environnement pour recevoir des notifications d’événements d’état de déploiement.

    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;
    }
    
    
  • Implémentez la UnadviseDeployStatusCallback méthode pour annuler l’inscription de l’environnement pour recevoir des notifications d’événements d’état de déploiement.

    public int UnadviseDeployStatusCallback(uint dwCookie)
    {
        adviseSink.RemoveAt(dwCookie);
        return VSConstants.S_OK;
    }
    
    
  • Implémentez la méthode pour effectuer l’opération Commit de validation spécifique à votre application. Cette méthode est principalement utilisée pour le déploiement de base de données.

    public int Commit(uint dwReserved)
    {
         //Implement commit operation here.
         return VSConstants.S_OK;
    }
    
    
  • Implémentez la Rollback méthode pour effectuer une opération de restauration. Lorsque cette méthode est appelée, le projet de déploiement doit effectuer les opérations appropriées pour restaurer les modifications et restaurer l’état du projet. Cette méthode est principalement utilisée pour le déploiement de base de données.

    public int Rollback(uint dwReserved)
    {
        //Implement Rollback operation here.
        return VSConstants.S_OK;
    }
    
    
  • Implémentez la QueryStartDeploy méthode pour déterminer si un projet est en mesure de démarrer une opération de déploiement.

    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;
    }
    
    
  • Implémentez la QueryStatusDeploy méthode pour déterminer si une opération de déploiement s’est terminée correctement.

    public int QueryStatusDeploy(out int pfDeployDone)
    {
        pfDeployDone = 1;
        if (deploymentThread != null && deploymentThread.IsAlive)
            pfDeployDone = 0;
        return VSConstants.S_OK;
    }
    
    
  • Implémentez la StartDeploy méthode pour commencer une opération de déploiement dans un thread distinct. Placez le code spécifique au déploiement de votre application à l’intérieur de la Deploy méthode.

    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;
    }
    
    
  • Implémentez la StopDeploy méthode pour arrêter une opération de déploiement. Cette méthode est appelée lorsqu’un utilisateur appuie sur le bouton Annuler pendant le processus de déploiement.

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

Remarque

Tous les exemples de code fournis dans cette rubrique font partie d’un exemple plus important dans les exemples VSSDK.