Gestire la distribuzione specializzata
Una distribuzione è un'operazione facoltativa per i progetti. Un progetto Web, ad esempio, supporta una distribuzione per consentire a un progetto di aggiornare un server Web. Analogamente, un progetto smart device supporta una distribuzione per copiare un'applicazione compilata nel dispositivo di destinazione. I sottotipi di progetto possono fornire un comportamento di distribuzione specializzato implementando l'interfaccia IVsDeployableProjectCfg . Questa interfaccia definisce un set completo delle operazioni di distribuzione:
-
L'operazione di distribuzione effettiva deve essere eseguita nel thread separato per rendere Visual Studio ancora più reattivo all'interazione dell'utente. I metodi forniti da IVsDeployableProjectCfg vengono chiamati in modo asincrono da Visual Studio e operano in background, consentendo all'ambiente di eseguire query sullo stato di un'operazione di distribuzione in qualsiasi momento o di arrestare l'operazione, se necessario. Le IVsDeployableProjectCfg operazioni di distribuzione dell'interfaccia vengono chiamate dall'ambiente quando l'utente seleziona il comando deploy.
Per notificare all'ambiente che un'operazione di distribuzione è iniziata o terminata, il sottotipo di progetto deve chiamare i OnStartDeploy metodi e OnEndDeploy .
Per gestire una distribuzione specializzata in base a un progetto di sottotipo
Implementare il AdviseDeployStatusCallback metodo per registrare l'ambiente per ricevere notifiche degli eventi di stato della distribuzione.
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; }
Implementare il UnadviseDeployStatusCallback metodo per annullare la registrazione dell'ambiente per ricevere notifiche degli eventi di stato della distribuzione.
Implementare il Commit metodo per eseguire l'operazione di commit specifica per l'applicazione. Questo metodo viene usato principalmente per la distribuzione del database.
Implementare il Rollback metodo per eseguire un'operazione di rollback. Quando questo metodo viene chiamato, il progetto di distribuzione deve eseguire qualsiasi operazione appropriata per eseguire il rollback delle modifiche e ripristinare lo stato del progetto. Questo metodo viene usato principalmente per la distribuzione del database.
Implementare il QueryStartDeploy metodo per determinare se un progetto è in grado di avviare un'operazione di distribuzione.
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; }
Implementare il QueryStatusDeploy metodo per determinare se un'operazione di distribuzione è stata completata correttamente.
Implementare il StartDeploy metodo per avviare un'operazione di distribuzione in un thread separato. Inserire il codice specifico per la distribuzione dell'applicazione all'interno del
Deploy
metodo .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; }
Implementare il StopDeploy metodo per arrestare un'operazione di distribuzione. Questo metodo viene chiamato quando un utente preme il pulsante Annulla durante il processo di distribuzione.
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
Tutti gli esempi di codice forniti in questo argomento sono parti di un esempio più ampio negli esempi di VSSDK.