Controlar la implementación especializada
Una implementación es una operación opcional para los proyectos. Un proyecto web, por ejemplo, admite una implementación para permitir que un proyecto actualice un servidor web. Del mismo modo, un proyecto de dispositivo inteligente admite una implementación para copiar una aplicación compilada en el dispositivo de destino. Los subtipos de proyecto pueden proporcionar un comportamiento de implementación especializado mediante la implementación de la IVsDeployableProjectCfg interfaz . Esta interfaz define un conjunto completo de operaciones de implementación:
-
La operación de implementación real debe realizarse en el subproceso independiente para que Visual Studio responda aún más a la interacción del usuario. Visual Studio llama de forma asincrónica a los métodos proporcionados por IVsDeployableProjectCfg y funciona en segundo plano, lo que permite al entorno consultar el estado de una operación de implementación en cualquier momento o detener la operación, si es necesario. El IVsDeployableProjectCfg entorno llama a las operaciones de implementación de la interfaz cuando el usuario selecciona el comando deploy.
Para notificar al entorno que ha comenzado o finalizado una operación de implementación, el subtipo del proyecto debe llamar a los OnStartDeploy métodos y OnEndDeploy .
Para controlar una implementación especializada por un proyecto de subtipo
Implemente el AdviseDeployStatusCallback método para registrar el entorno para recibir notificaciones de eventos de estado de implementación.
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; }
Implemente el método para cancelar el UnadviseDeployStatusCallback registro del entorno para recibir notificaciones de eventos de estado de implementación.
Implemente el Commit método para realizar la operación de confirmación específica de la aplicación. Este método se usa principalmente para la implementación de bases de datos.
Implemente el Rollback método para realizar una operación de reversión. Cuando se llama a este método, el proyecto de implementación debe hacer lo que sea adecuado para revertir los cambios y restaurar el estado del proyecto. Este método se usa principalmente para la implementación de bases de datos.
Implemente el QueryStartDeploy método para determinar si un proyecto puede iniciar o no una operación de implementación.
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; }
Implemente el QueryStatusDeploy método para determinar si una operación de implementación se ha completado correctamente.
Implemente el StartDeploy método para iniciar una operación de implementación en un subproceso independiente. Coloque el código específico de la implementación de la aplicación dentro del
Deploy
método .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; }
Implemente el StopDeploy método para detener una operación de implementación. Se llama a este método cuando un usuario presiona el botón Cancelar durante el proceso de implementación.
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; }
Nota:
Todos los ejemplos de código proporcionados en este tema son partes de un ejemplo mayor en ejemplos de VSSDK.