Jak: použití Správce BuildManager a BuildManagerEvents objektů
BuildManager Objekt se používá ke správě a zobrazení přenosného spustitelný soubor (PE) soubory vyrábí vlastní nástroje (jeden soubor generátory), které generují výstup návrhu.BuildManagerEventsudálosti jsou aktivována v případě položky projektu, které generovat spustitelné soubory dočasné přenosné jsou změněn nebo odstraněn.
Následující podrobné informace o programu proti BuildManager a BuildManagerEvents v objektu Visual Studio doplněk.
[!POZNÁMKA]
Dialogová okna a příkazy v nabídkách menu, které vidíte, se mohou lišit od těch popsaných v nápovědě, v závislosti na vašich aktivních nastaveních nebo edici.Tyto postupy byly vyvinuty s aktivní Obecné nastavení pro vývoj.Chcete-li změnit nastavení, zvolte Import and Export Settings v menu Nástroje.Další informace naleznete v tématu Nastavení aplikace Visual Studio.
Použití Správce BuildManager a BuildManagerEvents objektů
Vytvoření Visual Studio projektu přidat pomocí Visual C#.
Na projektu nabídky, klepněte na tlačítko Přidat odkaz na, klepněte .NET karta, vyberte bylo povoleno, VSLangProj, VSLangProj2 a VSLangProj80 a potom klepněte na tlačítko OK.
Přidejte následující pomocí příkazů na začátek souboru Connect.cs.
using VSLangProj; using VSLangProj2; using VSLangProj80; using System.Windows.Forms;
Přidat následující prohlášení do dolní části deklarovat třídu připojit BuildManagerEvents popisovač.
private DTE2 _applicationObject; private AddIn _addInInstance; private VSLangProj.BuildManagerEvents buildMgrEvents;
Přidáte následující způsob volání metody OnConnection.
_applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; // Call the BuildMangerSample method. BuildManagerSample(_applicationObject);
Přidáte deklarace metody BuildManagerSample přímo pod metodu OnConnection.
public void BuildManagerSample(DTE2 dte) { }
Přidejte následující prohlášení horní metodu BuildManagerSample.
Solution2 soln = (Solution2)_applicationObject.Solution; Project proj; VSProject2 vsproj; BuildManager bldMgr;
Nádech objektu VSProject2 projektu přidáním následujícího kódu do metody BuildManagerSample.
proj = soln.Projects.Item(1); // Get a reference to the VSProject2 object. vsproj = (VSProject2)proj.Object;
Přidat kód zástupných názvů pro PE soubor zobrazit v okně se zprávou 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"); }
Vytvořit BuildManagerEvents obslužné rutiny události přidáním následujícího kódu 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);
Přidat postupy pro každé události týkající BuildManagerEvents objektu.
void buildMgrEvents_DesignTimeOutputDirty (string bstrOutputMoniker) { MessageBox.Show(bstrOutputMoniker + " is dirty." , "BuildManager Events"); } void buildMgrEvents_DesignTimeOutputDeleted (string bstrOutputMoniker) { MessageBox.Show(bstrOutputMoniker + " was deleted." , "BuildManager Events"); }
Nakonec zakážete zpracování události přidáním následujícího kódu 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); } }
Kompletní kód je uveden v příkladu v části tohoto tématu.
Chcete-li vytvořit doplněk, klepněte na tlačítko Sestavit řešení na sestavení nabídce.
Otevřít Visual C# nebo Visual Basic v projektu Visual Studio integrované vývojové prostředí (IDE).
Přidání objektu dataset v projektu, klepněte na tlačítko Přidat novou položku na projektu nabídce.Vyberte DataSet z Přidat novou položku dialogovém okně a klepněte na OK.
Soubor objektu DataSet zajišťuje, že projekt má vlastní nástroj (jeden soubor generator) přidružený.
Na Nástroje nabídky, klepněte na tlačítko Správce doplňků a vyberte doplněk z Správce doplňků dialogové okno.Klepněte na tlačítko OK spustit doplněk.
Testovat kód BuildManagerEvents
Zobrazit BuildManagerEvents spalujících, obslužné rutiny do projektu přidat nový objekt dataset, upravit vlastnosti souboru dataset nebo odstranění souboru dataset.
Upravit vlastnosti souboru sady dat:
Vyberte soubor v objektu dataset Aplikaci Solution Explorer.
Klepněte pravým tlačítkem myši na soubor a vyberte Vlastnosti z rozevírací nabídky.
Na Vlastnosti okno Upravit pole.
Odstranění objektu dataset:
Vyberte soubor v objektu dataset Aplikaci Solution Explorer.
Klepněte pravým tlačítkem myši na soubor a vyberte Odstranit z rozevírací nabídky.
Příklad
Následující příklad je základní Visual Studio , který demonstruje použití BuildManager a BuildManagerEvents objekty pomocí Visual Studio automatizace.
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
Probíhá kompilace kódu
Tento kód kompilace, vytvořit nový Visual Studio přidat projektu a nahradit kód třídy připojit kód v příkladu.Před spuštěním-in, otevřete Visual C# nebo Visual Basic v projektu Visual Studio IDE.Informace o spuštění v Postup: ovládání doplňky pomocí Správce doplňků.
Viz také
Koncepty
Úvod do objektu Správce BuildManager