Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wdrożenie jest opcjonalną operacją dla projektów. Na przykład projekt internetowy obsługuje wdrożenie, aby umożliwić aktualizację serwera WWW. Podobnie projekt urządzenia inteligentnego obsługuje wdrożenie w celu skopiowania wbudowanej aplikacji na urządzenie docelowe. Podtypy projektu mogą zapewniać specjalistyczne zachowanie wdrożeniowe poprzez implementację interfejsu IVsDeployableProjectCfg. Ten interfejs definiuje kompletny zestaw operacji wdrażania:
-
Rzeczywista operacja wdrażania powinna być wykonywana w osobnym wątku, aby program Visual Studio był jeszcze bardziej dynamiczny na interakcję użytkownika. Metody udostępniane przez IVsDeployableProjectCfg program są wywoływane asynchronicznie przez program Visual Studio i działają w tle, umożliwiając środowisku wykonywanie zapytań o stan operacji wdrażania w dowolnym momencie lub zatrzymywanie operacji, jeśli jest to konieczne. IVsDeployableProjectCfg Operacje wdrażania interfejsu są wywoływane przez środowisko, gdy użytkownik wybierze polecenie deploy.
Aby powiadomić środowisko o rozpoczęciu lub zakończeniu operacji wdrażania, podtyp projektu musi wywołać metody OnStartDeploy i OnEndDeploy.
Aby zrealizować wyspecjalizowane wdrożenie przez projekt podtypowy
Zaimplementuj metodę rejestrowania AdviseDeployStatusCallback środowiska w celu odbierania powiadomień o zdarzeniach stanu wdrożenia.
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; }Zaimplementuj metodę UnadviseDeployStatusCallback , aby anulować rejestrację środowiska w celu otrzymywania powiadomień o zdarzeniach stanu wdrożenia.
Zaimplementuj metodę Commit , aby wykonać operację zatwierdzania specyficzną dla aplikacji. Ta metoda jest używana głównie na potrzeby wdrażania bazy danych.
Zaimplementuj metodę Rollback, aby wykonać operację wycofywania. Po wywołaniu tej metody projekt wdrożenia musi wykonać odpowiednie czynności, aby wycofać zmiany i przywrócić stan projektu. Ta metoda jest używana głównie na potrzeby wdrażania bazy danych.
Zaimplementuj metodę, QueryStartDeploy aby określić, czy projekt może rozpocząć operację wdrażania.
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; }Zaimplementuj metodę, QueryStatusDeploy aby określić, czy operacja wdrażania została ukończona pomyślnie.
Zaimplementuj metodę , StartDeploy aby rozpocząć operację wdrażania w osobnym wątku. Umieść kod specyficzny dla wdrożenia aplikacji wewnątrz
Deploymetody .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; }Zaimplementuj metodę , StopDeploy aby zatrzymać operację wdrażania. Ta metoda jest wywoływana, gdy użytkownik naciska przycisk Anuluj podczas procesu wdrażania.
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; }
Uwaga / Notatka
Wszystkie przykłady kodu podane w tym temacie są częścią większego przykładu w przykładach zestawu VSSDK.