Gewusst wie: Reagieren auf ClickOnce-Veröffentlichungsereignisse
Add-Ins für Visual Studio sind in Visual Studio 2013 veraltet. Sie müssen für Ihre Add-Ins ein Upgrade auf VSPackage-Erweiterungen durchführen. Weitere Informationen über das Durchführen eines Upgrades finden Sie unter FAQ: Konvertieren von Add-Ins in VSPackage-Erweiterungen.
Mit ClickOnce können Sie Windows-Anwendungen auf einem Webserver oder in einer Netzwerkdateifreigabe veröffentlichen und so den Installationsvorgang vereinfachen. Weitere Informationen finden Sie unter ClickOnce-Sicherheit und Bereitstellung.
Das zentrale Automatisierungsmodell von Visual Studio (enthalten in EnvDTE80) weist ein Objekt für die Ereignisbehandlung mit dem Namen PublishEvents auf. Mithilfe dieses Objekts können Sie den Start (OnPublishBegin) und das Ende (OnPublishDone) einer ClickOnce-Bereitstellung ermitteln. Auf Grundlage dieser Ereignisse können Sie eine Aktion ausführen. In der folgenden Prozedur wird die Behandlung dieser Ereignisse veranschaulicht.
Hinweis
Je nach den aktiven Einstellungen oder der Version unterscheiden sich die Dialogfelder und Menübefehle auf Ihrem Bildschirm möglicherweise von den in der Hilfe beschriebenen.Bei der Entwicklung dieser Verfahren war die Option Allgemeine Entwicklungseinstellungen aktiviert.Wählen Sie im Menü Extras die Option Einstellungen importieren und exportieren aus, um die Einstellungen zu ändern.Weitere Informationen finden Sie unter Anpassen der Entwicklungseinstellungen in Visual Studio.
So reagieren Sie auf ClickOnce-Ereignisse
Fügen Sie der Connect-Klasse eines neuen oder vorhandenen Add-Ins den folgenden Code hinzu.
Erstellen und aktivieren Sie das Add-In wie unter Gewusst wie: Steuern von Add-Ins mit dem Add-In-Manager beschrieben.
Starten Sie einen ClickOnce-Bereitstellungsvorgang wie unter ClickOnce-Sicherheit und Bereitstellung beschrieben.
Es wird ein Meldungsfeld anzeigt, sobald die Bereitstellung beginnt bzw. endet.
Beispiel
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;
}
}
Siehe auch
Konzepte
Steuern von Projekten und Projektmappen