Procedura: rispondere a eventi di pubblicazione ClickOnce
ClickOnce consente di pubblicare applicazioni Windows in un server Web o una condivisione file di rete per un'installazione semplificata.Per ulteriori informazioni, vedere Sicurezza e distribuzione di ClickOnce.
Il modello di automazione di base di Visual Studio, contenuto in EnvDTE80, dispone di un oggetto di gestione degli eventi denominato PublishEvents.È possibile utilizzare questo oggetto per rilevare l'inizio (OnPublishBegin) e la fine (OnPublishDone) di una distribuzione ClickOnce.In base a questi eventi sarà possibile eseguire un'azione.Di seguito viene illustrato come gestire questi eventi.
[!NOTA]
È possibile che le finestre di dialogo e i comandi di menu visualizzati siano diversi da quelli descritti nella Guida a seconda delle impostazioni attive o dell'edizione del programma.Queste procedure sono state sviluppate con le Impostazioni generali per lo sviluppo attive.Per modificare le impostazioni, scegliere Importa/EsportaImpostazioni dal menu Strumenti.Per ulteriori informazioni, vedere Impostazioni di Visual Studio.
Per rispondere a eventi ClickOnce
In un componente aggiuntivo nuovo o esistente aggiungere il codice riportato di seguito alla classe Connect.
Compilare e attivare il componente aggiuntivo come descritto in Procedura: controllare i componenti aggiuntivi tramite Gestione componenti aggiuntivi.
Iniziare un'operazione di distribuzione ClickOnce come descritto in Sicurezza e distribuzione di ClickOnce.
In corrispondenza dell'inizio e della fine della distribuzione verrà visualizzata una finestra di messaggio.
Esempio
Public Class Connect
Implements IDTExtensibility2
Public WithEvents pubEvents As EnvDTE80.PublishEvents
Dim _applicationObject As DTE2
Dim _addInInstance As AddIn
Public Sub OnConnection(ByVal application As Object, ByVal _
connectMode As ext_ConnectMode, ByVal addInInst As Object, ByRef _
custom As Array)
Implements IDTExtensibility2.OnConnection
Try
_applicationObject = CType(application, DTE2)
_addInInstance = CType(addInInst, AddIn)
Try
_applicationObject = CType(application, DTE2)
_addInInstance = CType(addInInst, AddIn)
Dim events As EnvDTE80.Events2
events = CType(_applicationObject.Events2, Events2)
pubEvents = CType(events._PublishEvents(Nothing), _
EnvDTE80.PublishEvents)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Private Sub pubEvents_OnPublishBegin(ByRef [Continue] As Boolean) _
Handles pubEvents.OnPublishBegin
MsgBox("A publish event is occuring…")
End Sub
Private Sub pubEvents_OnPublishDone(ByVal Success As Boolean) _
Handles pubEvents.OnPublishDone
MsgBox("A publish event has completed.")
End Sub
Public Sub OnDisconnection(ByVal disconnectMode As _
ext_DisconnectMode, ByRef custom As Array) Implements _
IDTExtensibility2.OnDisconnection
pubEvents = Nothing
End Sub
using System;
using Extensibility;
using EnvDTE;
using EnvDTE80;
namespace MyAddin2
{
public class Connect : IDTExtensibility2
{
public Connect()
{
}
public void OnConnection(object application,
ext_ConnectMode connectMode, object addInInst, ref Array
custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
try
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
EnvDTE80.Events2 events;
events = (Events2)_applicationObject.Events;
// Retrieve the delegates for the Publish events.
pubEvents = (EnvDTE80.PublishEvents)
events.PublishEvents;
// Connect to the delegates exposed from the Publish
// objects retrieved above.
pubEvents.OnPublishBegin += new
_dispPublishEvents_OnPublishBeginEventHandler
(this.OnPublishBegin);
pubEvents.OnPublishDone += new
_dispPublishEvents_OnPublishDoneEventHandler
(this.OnPublishDone);
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}
// When the Publish operation is done, disconnect the event
// handlers to prevent slowing of your system.
public void OnDisconnection(ext_DisconnectMode disconnectMode,
ref Array custom)
{
if (pubEvents != null)
{
pubEvents.OnPublishBegin -= new
_dispPublishEvents_OnPublishBeginEventHandler
(this.OnPublishBegin);
pubEvents.OnPublishDone -= new
_dispPublishEvents_OnPublishDoneEventHandler
(this.OnPublishDone);
}
}
// The Publish events.
public void OnPublishBegin(ref bool pubContinue)
{
if (pubContinue == true)
{
System.Windows.Forms.MessageBox.Show
("A publish event is occuring…");
}
else
{
System.Windows.Forms.MessageBox.Show
("A publish event has halted.");
}
}
public void OnPublishDone(bool success)
{
if (success == true)
{
System.Windows.Forms.MessageBox.Show
("A publish event has completed.");
}
else
{
System.Windows.Forms.MessageBox.Show
("A publish event did not succeed.");
}
}
public void OnAddInsUpdate(ref Array custom)
{
}
public void OnStartupComplete(ref Array custom)
{
}
public void OnBeginShutdown(ref Array custom)
{
}
private EnvDTE80.PublishEvents pubEvents;
private DTE2 _applicationObject;
private AddIn _addInInstance;
}
}
Vedere anche
Concetti
Controllo di progetti e soluzioni