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í:
-
Skutečná operace nasazení by měla být provedena v samostatném vlákně, aby Visual Studio ještě rychleji reagovalo na interakci uživatele. Metody poskytované IVsDeployableProjectCfg sadou Visual Studio se nazývají asynchronně a pracují na pozadí, což prostředí umožňuje dotazovat se na stav operace nasazení kdykoli nebo v případě potřeby operaci zastavit. Operace IVsDeployableProjectCfg nasazení rozhraní jsou volány prostředím, když uživatel vybere příkaz deploy.
Aby bylo prostředí upozorněno, že operace nasazení začala nebo skončila, musí podtyp projektu volat OnStartDeploy metody a OnEndDeploy metody.
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í.
Implementujte metodu Commit pro provedení operace potvrzení specifické pro vaši aplikaci. Tato metoda se používá hlavně pro nasazení databáze.
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.
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.
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.