Behandeln von spezialisierten Bereitstellungen
Eine Bereitstellung ist ein optionaler Vorgang für Projekte. Ein Webprojekt unterstützt z. B. eine Bereitstellung, damit ein Projekt einen Webserver aktualisieren kann. Ebenso unterstützt ein Smart Device-Projekt eine Bereitstellung, um eine integrierte Anwendung auf das Zielgerät zu kopieren. Project-Untertypen können spezielles Bereitstellungsverhalten bereitstellen, indem sie die IVsDeployableProjectCfg Schnittstelle implementieren. Diese Schnittstelle definiert einen vollständigen Satz von Bereitstellungsvorgängen:
-
Der tatsächliche Bereitstellungsvorgang sollte im separaten Thread ausgeführt werden, damit Visual Studio noch besser auf die Benutzerinteraktion reagiert. Die von IVsDeployableProjectCfg Visual Studio bereitgestellten Methoden werden asynchron aufgerufen und im Hintergrund ausgeführt, sodass die Umgebung den Status eines Bereitstellungsvorgangs jederzeit abfragen oder den Vorgang bei Bedarf beenden kann. Die IVsDeployableProjectCfg Bereitstellungsvorgänge der Benutzeroberfläche werden von der Umgebung aufgerufen, wenn der Benutzer den Bereitstellungsbefehl auswählt.
Um die Umgebung darüber zu informieren, dass ein Bereitstellungsvorgang begonnen oder beendet wurde, muss der Projektuntertyp die OnStartDeploy Methoden und Methoden OnEndDeploy aufrufen.
So behandeln Sie eine spezielle Bereitstellung durch ein Untertypprojekt
Implementieren Sie die AdviseDeployStatusCallback Methode, um die Umgebung zu registrieren, um Benachrichtigungen über Bereitstellungsstatusereignisse zu erhalten.
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; }
Implementieren Sie die UnadviseDeployStatusCallback Methode, um die Registrierung der Umgebung abzubrechen, um Benachrichtigungen über Bereitstellungsstatusereignisse zu erhalten.
Implementieren Sie die Commit Methode, um den commit-Vorgang speziell für Ihre Anwendung auszuführen. Diese Methode wird Standard für die Datenbankbereitstellung verwendet.
Implementieren Sie die Rollback Methode zum Ausführen eines Rollbackvorgangs. Wenn diese Methode aufgerufen wird, muss das Bereitstellungsprojekt alle geeigneten Aktionen ausführen, um Änderungen zurückzusetzen und den Status des Projekts wiederherzustellen. Diese Methode wird Standard für die Datenbankbereitstellung verwendet.
Implementieren Sie die QueryStartDeploy Methode, um zu bestimmen, ob ein Projekt einen Bereitstellungsvorgang starten kann.
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; }
Implementieren Sie die QueryStatusDeploy Methode, um festzustellen, ob ein Bereitstellungsvorgang erfolgreich abgeschlossen wurde.
Implementieren Sie die StartDeploy Methode, um einen Bereitstellungsvorgang in einem separaten Thread zu starten. Platzieren Sie den codespezifischen Code für die Bereitstellung Ihrer Anwendung in der
Deploy
Methode.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; }
Implementieren Sie die StopDeploy Methode, um einen Bereitstellungsvorgang zu beenden. Diese Methode wird aufgerufen, wenn ein Benutzer während des Bereitstellungsprozesses die Schaltfläche "Abbrechen " drückt.
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; }
Hinweis
Alle codebeispiele in diesem Thema sind Teile eines größeren Beispiels in VSSDK-Beispielen.