Jak: Obiekt BuildManager I BuildManagerEvents obiektów
BuildManager Obiekt jest używany do zarządzania i wyświetlania plików portable executable (PE), wyprodukowanych przez uruchomienie narzędzia niestandardowe (generatorów pojedynczy plik), które generują dane wyjściowe w czasie projektowania.BuildManagerEventszdarzenia są wywoływane, gdy elementy projektu, generujących tymczasowe pliki wykonywalne przenośnych są zmienione lub usunięte.
Następujące szczegółowe informacje dotyczące programu przeciwko BuildManager i BuildManagerEvents obiekt w Visual Studio dodatek.
[!UWAGA]
Okien dialogowych i poleceń menu, którą widzisz mogą różnić się od tych opisanych w pomocy, w zależności od tego, aktywne ustawienia lub edition.Procedury te zostały opracowane z ogólnych ustawień rozwoju aktywnych.Aby zmienić ustawienia, wybierz polecenie Importuj i Eksportuj ustawienia na Narzędzia menu.Aby uzyskać więcej informacji, zobacz Visual Studio, ustawienia.
Aby używać obiektów Obiekt BuildManager i BuildManagerEvents
Tworzenie Visual Studio -w projekcie przy użyciu Visual C#.
Na Projekt menu, kliknij przycisk Dodaj odwołanie, kliknij przycisk .NET tab, wybierz System.Windows.Forms, VSLangProj, VSLangProj2 i VSLangProj80, a następnie kliknij przycisk OK.
Dodaje się przy użyciu instrukcji do początku pliku Connect.cs.
using VSLangProj; using VSLangProj2; using VSLangProj80; using System.Windows.Forms;
Dodaj następującą deklarację do dołu klasy Połącz, aby zadeklarować BuildManagerEvents obsługi.
private DTE2 _applicationObject; private AddIn _addInInstance; private VSLangProj.BuildManagerEvents buildMgrEvents;
Dodaj poniższe wywołanie metody do metody OnConnection.
_applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; // Call the BuildMangerSample method. BuildManagerSample(_applicationObject);
Dodaj deklaracja metody BuildManagerSample, bezpośrednio poniżej metoda OnConnection.
public void BuildManagerSample(DTE2 dte) { }
Dodaj następujące deklaracje do góry metody BuildManagerSample.
Solution2 soln = (Solution2)_applicationObject.Solution; Project proj; VSProject2 vsproj; BuildManager bldMgr;
Oddania projektu do obiektu VSProject2, dodając następujący kod do metody BuildManagerSample.
proj = soln.Projects.Item(1); // Get a reference to the VSProject2 object. vsproj = (VSProject2)proj.Object;
Dodaj kod, aby wyświetlić monikerów plik PE w oknie komunikatu za pomocą BuildDesignTimeOutput.
bldMgr = vsproj.BuildManager; Array monikers = null; String msg = null; Object obj = bldMgr.DesignTimeOutputMonikers; if (obj != null) { try { monikers = (System.Array)obj; foreach(String tempmoniker in monikers) { msg += bldMgr.BuildDesignTimeOutput(tempmoniker) + "\n"; } } catch(Exception ex) { MessageBox.Show(ex.Message); } MessageBox.Show("The build design-time output is:" + "\n" + msg, "Temporary PE Monikers"); }
Tworzenie BuildManagerEvents obsługi zdarzeń, dodając następujący kod do metody BuildManagerSample.
//Hook up buildmanager events. buildMgrEvents = vsproj.Events.BuildManagerEvents; buildMgrEvents.DesignTimeOutputDeleted += new _dispBuildManagerEvents_DesignTimeOutputDeletedEventHandler (buildMgrEvents_DesignTimeOutputDeleted); buildMgrEvents. DesignTimeOutputDirty += new _dispBuildManagerEvents_DesignTimeOutputDirtyEventHandler( buildMgrEvents_DesignTimeOutputDirty);
Dodawanie procedury dla każdego zdarzenia związane z BuildManagerEvents obiektu.
void buildMgrEvents_DesignTimeOutputDirty (string bstrOutputMoniker) { MessageBox.Show(bstrOutputMoniker + " is dirty." , "BuildManager Events"); } void buildMgrEvents_DesignTimeOutputDeleted (string bstrOutputMoniker) { MessageBox.Show(bstrOutputMoniker + " was deleted." , "BuildManager Events"); }
Wreszcie należy wyłączyć obsługę zdarzeń dodając następujący kod do metody OnDisconnection.
public void OnDisconnection(ext_DisconnectMode disconnectMode, ref Array custom) { // If the delegate handlers have been connected, then // disconnect them here. // If you do not do this, the handlers may still // fire because garbage collection has not removed them. if (buildMgrEvents != null) { buildMgrEvents.DesignTimeOutputDeleted -= new _dispBuildManagerEvents_DesignTimeOutputDeletedEventHandler (buildMgrEvents_DesignTimeOutputDeleted); buildMgrEvents.DesignTimeOutputDirty -= new _dispBuildManagerEvents_DesignTimeOutputDirtyEventHandler (buildMgrEvents_DesignTimeOutputDirty); } }
Kompletny kod znajduje się w sekcji przykład tego tematu.
Aby zbudować dodatek, kliknij przycisk Roztwór budować na budować menu.
Otwórz Visual C# lub Visual Basic projektu w Visual Studio zintegrowane środowisko dewelopowania (IDE).
Aby dodać element dataset w projekcie, kliknij przycisk Dodaj nowy element na Projekt menu.Wybierz DataSet z Dodaj nowy element okno dialogowe i kliknij przycisk OK.
Plik zestawu danych zapewnia, że projekt ma niestandardowe narzędzie (pojedynczy plik generator) skojarzony z nim.
Na Narzędzia menu, kliknij przycisk - w Menedżerze i wybierz dodatek z - W Menedżerze okno dialogowe.Kliknij przycisk OK do uruchomienia dodatku.
Aby przetestować kod BuildManagerEvents
Aby zobaczyć BuildManagerEvents obsługi wyzwalania, dodawanie nowego zestawu danych do projektu, modyfikować właściwości pliku zestawu danych lub usunąć plik zestawu danych.
Aby zmodyfikować właściwości pliku zestawu danych:
Wybierz plik zestawu danych w Solution Explorer.
Kliknij prawym przyciskiem myszy plik i wybierz opcję Właściwości z menu rozwijanego.
Na Właściwości okno modyfikować żadnych pól.
Aby usunąć zestaw danych:
Wybierz plik zestawu danych w Solution Explorer.
Kliknij prawym przyciskiem myszy plik i wybierz opcję usunąć z menu rozwijanego.
Przykład
Poniższy przykład stanowi podstawowy Visual Studio dodatek, który demonstruje, jak używać BuildManager i BuildManagerEvents obiektów za pomocą Visual Studio automatyzacji.
using System;
using Extensibility;
using EnvDTE;
using EnvDTE80;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
using System.Windows.Forms;
namespace MyAddIn
{
public class Connect : Object, IDTExtensibility2
{
public Connect()
{
}
public void OnConnection(object application,
ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
// Call the BuildMangerSample method.
BuildManagerSample(_applicationObject);
}
public void BuildManagerSample(DTE2 dte)
{
try
{
Solution2 soln =
(Solution2)_applicationObject.Solution;
Project proj;
VSProject2 vsproj;
BuildManager bldMgr;
proj = soln.Projects.Item(1);
// Cast to the VSProject2 object.
vsproj = (VSProject2)proj.Object;
bldMgr = vsproj.BuildManager;
Array monikers = null;
String msg = null;
Object obj = bldMgr.DesignTimeOutputMonikers;
if (obj != null)
{
try
{
monikers = (System.Array)obj;
foreach(String tempmoniker in monikers)
{
msg +=
bldMgr.BuildDesignTimeOutput(tempmoniker) + "\n";
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
MessageBox.Show("The build design-time output is:"
+ "\n" + msg, "Temporary PE Monikers");
}
//Hook up buildmanager events.
buildMgrEvents = vsproj.Events.BuildManagerEvents;
buildMgrEvents.DesignTimeOutputDeleted +=new
_dispBuildManagerEvents_DesignTimeOutputDeletedEventHandler
(buildMgrEvents_DesignTimeOutputDeleted);
buildMgrEvents.DesignTimeOutputDirty +=new
_dispBuildManagerEvents_DesignTimeOutputDirtyEventHandler
(buildMgrEvents_DesignTimeOutputDirty);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
void buildMgrEvents_DesignTimeOutputDirty
(string bstrOutputMoniker)
{
MessageBox.Show(bstrOutputMoniker + " is dirty.",
"BuildManager Events");
}
void buildMgrEvents_DesignTimeOutputDeleted(
string bstrOutputMoniker)
{
MessageBox.Show(bstrOutputMoniker + " was deleted."
, "BuildManager Events");
}
public void OnDisconnection(ext_DisconnectMode disconnectMode
, ref Array custom)
{
// If the delegate handlers have been connected, then
// disconnect them here.
// If you do not do this, the handlers may still
// fire because garbage collection has not removed them.
if (buildMgrEvents != null)
{
buildMgrEvents.DesignTimeOutputDeleted -= new
_dispBuildManagerEvents_DesignTimeOutputDeletedEventHandler
(buildMgrEvents_DesignTimeOutputDeleted);
buildMgrEvents.DesignTimeOutputDirty -= new
_dispBuildManagerEvents_DesignTimeOutputDirtyEventHandler
(buildMgrEvents_DesignTimeOutputDirty);
}
}
public void OnAddInsUpdate(ref Array custom)
{
}
public void OnStartupComplete(ref Array custom)
{
}
public void OnBeginShutdown(ref Array custom)
{
}
private DTE2 _applicationObject;
private AddIn _addInInstance;
private VSLangProj.BuildManagerEvents buildMgrEvents;
}
}
Imports System
Imports Microsoft.VisualStudio.CommandBars
Imports Extensibility
Imports EnvDTE
Imports EnvDTE80
Imports VSLangProj
Imports VSLangProj2
Imports VSLangProj80
Public Class Connect
Implements IDTExtensibility2
Dim _applicationObject As DTE2
Dim _addInInstance As AddIn
Public WithEvents buildMgrEvents As VSLangProj.BuildManagerEvents
Public Sub New()
End Sub
Public Sub OnConnection(ByVal application As Object, ByVal _
connectMode As ext_ConnectMode, ByVal addInInst As Object, _
ByRef custom As Array) Implements IDTExtensibility2.OnConnection
_applicationObject = CType(application, DTE2)
_addInInstance = CType(addInInst, AddIn)
BuildManagerSample(_applicationObject)
End Sub
Sub BuildManagerSample(ByVal dte As DTE2)
Try
Dim soln As Solution2 = CType(_applicationObject.Solution _
, Solution2)
Dim proj As Project
Dim vsproj As VSProject2
Dim bldMgr As BuildManager
proj = soln.Projects.Item(1)
' Cast the project to a VSProject2.
vsproj = CType(proj.Object, VSProject2)
bldMgr = vsproj.BuildManager
Dim monikers As String() = Nothing
Dim moniker As String = Nothing
Dim msg As String = ""
Dim obj As Object = bldMgr.DesignTimeOutputMonikers
If Not obj Is Nothing Then
Try
monikers = CType(obj, String())
For Each moniker In monikers
msg &= bldMgr.BuildDesignTimeOutput(moniker) _
+ vbCr
Next
Catch ex As System.Exception
MsgBox(ex.ToString)
End Try
MsgBox("The build design-time output is:" + vbCr _
+ msg, MsgBoxStyle.Information _
, "BuildManager Monikers")
End If
buildMgrEvents = vsproj.Events.BuildManagerEvents
AddHandler buildMgrEvents.DesignTimeOutputDeleted _
, AddressOf OutputDeleted
AddHandler buildMgrEvents.DesignTimeOutputDirty _
, AddressOf OutputDirty
Catch ex As System.Exception
MsgBox(ex.ToString)
End Try
End Sub
Sub OutputDeleted(ByVal deletedMoniker As String)
MsgBox(deletedMoniker & " was deleted." _
, MsgBoxStyle.Information, "BuildManagerEvents Information")
End Sub
Sub OutputDirty(ByVal dirtyMoniker As String)
MsgBox(dirtyMoniker & " is dirty." _
, MsgBoxStyle.Information, "BuildManagerEvents Information")
End Sub
Public Sub OnDisconnection(ByVal disconnectMode _
As ext_DisconnectMode, ByRef custom As Array) _
Implements IDTExtensibility2.OnDisconnection
' Turns off BuildManager event handling when the
' add-in shuts down.
buildMgrEvents = Nothing
End Sub
Public Sub OnAddInsUpdate(ByRef custom As Array) _
Implements IDTExtensibility2.OnAddInsUpdate
End Sub
Public Sub OnStartupComplete(ByRef custom As Array) _
Implements IDTExtensibility2.OnStartupComplete
End Sub
Public Sub OnBeginShutdown(ByRef custom As Array) _
Implements IDTExtensibility2.OnBeginShutdown
End Sub
End Class
Kompilowanie kodu
Aby skompilować kod, Utwórz nowy Visual Studio -w projekcie i Zastąp kod klasy Połącz z kodem w przykładzie.Przed uruchomieniem dodatku, należy otworzyć Visual C# lub Visual Basic projektu w Visual Studio IDE.Aby uzyskać informacje o sposobach uruchamiania dodatku, zobacz Jak: dodatki formantu przy użyciu dodać Menedżera.
Zobacz też
Koncepcje
Wprowadzenie do obiektu, Obiekt BuildManager
Wprowadzenie do projektu rozszerzalności