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 :
-
L’opération de déploiement réelle doit être effectuée dans le thread distinct pour rendre Visual Studio encore plus réactif à l’interaction utilisateur. Les méthodes fournies sont IVsDeployableProjectCfg appelées de manière asynchrone par Visual Studio et fonctionnent en arrière-plan, ce qui permet à l’environnement d’interroger l’état d’une opération de déploiement à tout moment ou d’arrêter l’opération, si nécessaire. Les IVsDeployableProjectCfg opérations de déploiement d’interface sont appelées par l’environnement lorsque l’utilisateur sélectionne la commande deploy.
Pour informer l’environnement qu’une opération de déploiement a commencé ou s’est terminée, le sous-type de projet doit appeler les méthodes et les OnStartDeploy OnEndDeploy méthodes.
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.
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.
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.
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.
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.