Exemplarische Vorgehensweise: Erstellen einer einfachen Projektfunktion, die beim Laden von Projekten ausgelöst wird
Sie können eine Projektfunktion erstellen, damit bei Auftreten projektbezogener Aktionen benutzerdefinierte Aktionen ausgeführt werden. In dieser exemplarischen Vorgehensweise wird eine Projektfunktion mit dem Namen SampleProjectFeature erstellt, durch die beim Laden eines Datenbankprojekts ein Dialogfeld angezeigt wird. Sie können dieses Beispiel ändern, um beim Laden des Datenbankprojekts Aktionen auszuführen.
Im Verlauf dieser exemplarischen Vorgehensweise werden die folgenden Hauptaufgaben ausgeführt:
Erstellen eines Visual Studio-Pakets
Definieren einer Projektfunktion
Testen der Projektfunktion
Vorbereitungsmaßnahmen
Zum Durchführen dieser exemplarischen Vorgehensweise benötigen Sie die folgenden Komponenten:
Visual Studio 2010 Professional, Visual Studio 2010 Premium oder Visual Studio 2010 Ultimate muss installiert sein.
Sie müssen über ein Datenbankprojekt verfügen.
Zudem muss auf Ihrem Computer auch Visual Studio 2010 SDK installiert sein. Dieses Kit kann auf der folgenden Seite der Microsoft-Website heruntergeladen werden: Visual Studio 2010 SDK.
Tipp
Diese exemplarische Vorgehensweise richtet sich an Benutzer, die bereits mit den Datenbankfunktionen von Visual Studio vertraut sind. Sie sollten außerdem mit grundlegenden Konzepten von Visual Studio wie dem Erstellen einer Klassenbibliothek und dem Verwenden des Code-Editors zum Hinzufügen von Code zu einer Klasse vertraut sein.
Erstellen eines Visual Studio-Pakets
So starten Sie den Assistenten für Visual Studio-Integrationspakete
Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.
Erweitern Sie in der Liste Installierte Vorlagen den Knoten Andere Projekttypen, und klicken Sie auf den Knoten Erweiterungen.
Klicken Sie im Detailbereich auf Visual Studio-Paket.
Wichtig
Wenn das Visual Studio 2010 SDK nicht installiert wurde, ist der Projekttyp für Visual Studio-Integrationspakete nicht verfügbar.
Geben Sie unter Name den Namen SampleProjectFeature ein.
Klicken Sie auf OK.
Der Assistent für Visual Studio-Integrationspakete wird angezeigt.
Im nächsten Schritt wird das zu erstellende Projekt mithilfe des Assistenten konfiguriert.
So erstellen Sie das Projekt mithilfe des Assistenten für Visual Studio-Integrationspakete
Klicken Sie auf Weiter.
Klicken Sie unter Sprache auswählen auf Visual C#.
Tipp
Das Paket kann auch mithilfe von Visual Basic oder Visual C++ erstellt werden. Diese exemplarische Vorgehensweise enthält nur Beispielcode für Visual Basic und Visual C#.
Klicken Sie unter Schlüssel für Assemblysignierung abrufen auf Neue Schlüsseldatei für die Assemblysignierung generieren.
Klicken Sie auf Weiter.
Geben Sie unter Firmenname den Namen MyCompany ein.
Geben Sie als VSPackage-Namen die Zeichenfolge SampleProjectFeature ein.
Geben Sie eine spezifische Versionsnummer an. (optional)
Passen Sie das vom Paket verwendete Symbol an. (optional)
Geben Sie unter Detaillierte Informationen weitere Informationen zum Paket an. (optional)
Klicken Sie auf Weiter.
Aktivieren Sie das Kontrollkästchen Menübefehl.
Vergewissern Sie sich, dass die Kontrollkästchen Toolfenster und Benutzerdefinierter Editor deaktiviert sind.
Klicken Sie auf Weiter.
Geben Sie unter Befehlsname die Zeichenfolge Toggle Project Loaded Dialogs ein.
Geben Sie unter Befehls-ID die Zeichenfolge cmdidEnableDialogs ein.
Klicken Sie auf Weiter.
Deaktivieren Sie die Kontrollkästchen für Integrationstestprojekt und Komponententestprojekt.
Tipp
Wenn Sie ein Paket zur tatsächlichen Verwendung in der Organisation erstellen, sollten Sie ggf. Tests für das Paket erstellen, um zu gewährleisten, dass es ordnungsgemäß funktioniert.
Klicken Sie auf Fertig stellen.
Ein Visual Studio-Integrationspaketprojekt wird erstellt und im Projektmappen-Explorer angezeigt.
Im nächsten Schritt wird der Code im Paket angepasst, um die Datenbankprojektfunktion zu definieren.
Definieren einer Projektfunktion
Wenn Sie die Paketdefinition ändern, um eine Datenbankprojektfunktion zu definieren, müssen Sie zunächst die Paketdefinition aktualisieren und anschließend die SampleProjectFeature-Klasse hinzufügen.
So aktualisieren Sie die Paketdefinition
Doppelklicken Sie im Projektmappen-Explorer auf "SampleProjectFeaturePackage.cs", um die Datei im Code-Editor zu öffnen.
Suchen Sie im Code-Editor die MenuItemCallback-Methode.
Ersetzen Sie die Methodendefinition durch den folgenden Code:
private void MenuItemCallback(object sender, EventArgs e) { SampleProjectFeature.EnableDialogs = !SampleProjectFeature.EnableDialogs; }
Tipp
In der Fehlerliste wird ein Fehler angezeigt, da Sie die SampleProjectFeature-Klasse und die EnableDialogs-Methode noch nicht definiert haben.
Klicken Sie im Menü Datei auf SampleProjectFeaturePackage.cs speichern.
Anschließend wird die Projektfunktionsklasse definiert.
So definieren Sie die SampleProjectFeature-Klasse
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt "SampleProjectFeature", zeigen Sie auf Hinzufügen, und klicken Sie anschließend auf Klasse.
Das Dialogfeld Neues Element hinzufügen wird angezeigt, und die Klassenvorlage ist bereits hervorgehoben.
Geben Sie unter Name den Namen "SampleProjectFeature.cs" ein.
Klicken Sie auf Hinzufügen.
Die neue Klasse wird dem Projekt hinzugefügt, und der Code-Editor wird mit der Klassendefinition angezeigt.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und klicken Sie anschließend auf Verweis hinzufügen.
Das Dialogfeld Verweis hinzufügen wird angezeigt.
Klicken Sie auf die Registerkarte .NET.
Markieren Sie in der Liste mit den Komponenten die folgenden Verweise, und klicken Sie dann auf OK:
Microsoft.Data.Schema
Microsoft.VisualStudio.Data.Schema.Package
Fügen Sie der Klassendefinition im Code-Editor mithilfe von Anweisungen Folgendes hinzu:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Data.Schema.Extensibility; using Microsoft.Data.Schema; using Microsoft.VisualStudio.Data.Schema.Package.Project; using Microsoft.VisualStudio.Shell.Interop; using System.Globalization;
Ändern Sie die Klassendefinition, um die Basisklasse sowie das Attribut anzugeben, mit dem festgelegt wird, mit welchen Datenbankschema-Anbietern die Funktion kompatibel ist. In dieser exemplarischen Vorgehensweise ist das Beispiel mit allen Datenbankschema-Anbietern kompatibel.
[DatabaseSchemaProviderCompatibility(typeof(DatabaseSchemaProvider))] class SampleProjectFeature : IDatabaseProjectFeature { }
Relevante Schnittstellen, Typen und Methoden: DatabaseSchemaProviderCompatibilityAttribute, DatabaseSchemaProvider und IDatabaseProjectFeature.
Fügen Sie der Klasse ein Eigenschaftenpaar hinzu:
public static bool EnableDialogs { get; set; } private IDatabaseProjectNode ProjectNode { get; set; }
Die erste Eigenschaft wird von dem Befehl verwendet, mit dem die Projektfunktion aktiviert oder deaktiviert werden kann. Relevante Schnittstelle: IDatabaseProjectNode.
Fügen Sie der Klasse den folgenden Konstruktor hinzu:
static SampleProjectFeature() { EnableDialogs = true; }
Von dem Konstruktor wird die EnableDialogs-Eigenschaft initialisiert.
Fügen Sie der Klasse die Initialize-Methode hinzu:
public void Initialize(IDatabaseProjectNode projectNode) { ProjectNode = projectNode; // Hook up to a few events ProjectNode.ProjectLoaded += delegate { ShowDialog("In ProjectLoaded Event"); }; }
Von der Initialize-Methode wird das Projekt identifiziert, auf das die Funktion angewendet wird. Anschließend wird auf das ProjectLoaded-Ereignis gewartet.
Fügen Sie abschließend die ShowDialog-Methode hinzu, von der bei Auftreten eines ProjectLoaded-Ereignisses ein Dialogfeld angezeigt wird, sofern die Funktion aktiviert ist:
void ShowDialog(string msg) { if (!SampleProjectFeature.EnableDialogs) return; // Show a Message Box to indicate that we were here IVsUIShell uiShell = (IVsUIShell)Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(SVsUIShell)); Guid clsid = Guid.Empty; int result; Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(uiShell.ShowMessageBox( 0, ref clsid, "Simple Project Feature", msg, string.Empty, 0, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST, OLEMSGICON.OLEMSGICON_INFO, 0, // false out result)); }
Hat der Benutzer die Funktion mithilfe des Menübefehls deaktiviert, wird "False" zurückgegeben. Andernfalls wird ein Dialogfeld angezeigt. In einer eigenen Projektfunktion können statt der Anzeige eines Dialogfelds weitere Verarbeitungsschritte ausgeführt werden.
Klicken Sie im Menü Datei auf SampleProjectFeature.cs speichern.
Anschließend erstellen Sie das Projekt.
So erstellen Sie das Projekt
- Klicken Sie im Menü Erstellen auf Projektmappe erstellen.
Anschließend erfassen Sie im Projekt generierte Assemblyinformationen, u. a. Version, Kultur und PublicKeyToken.
So erfassen Sie Assemblyinformationen
Öffnen Sie das Startmenü, zeigen Sie auf Microsoft Visual Studio 2010, dann auf Visual Studio-Tools, und klicken Sie anschließend auf Visual Studio-Eingabeaufforderung (2010).
Navigieren Sie zu dem Ordner, der die erstellte Assembly (SampleProjectFeature.dll) enthält.
Geben Sie die folgende Befehlszeile ein:
SN.EXE -T SampleProjectFeature.dll
Notieren Sie sich das öffentliche Schlüsseltoken. Dieses wird im nächsten Verfahren verwendet.
Danach erstellen Sie eine XML-Datei mit den Assemblyinformationen, die Sie im vorhergehenden Verfahren erfasst haben.
So erstellen Sie die XML-Datei
Wählen Sie im Projektmappen-Explorer das Projekt SampleProjectFeature aus.
Klicken Sie im Menü Projekt auf Neues Element hinzufügen.
Suchen Sie im Bereich Vorlagen das Element XML-Datei, und wählen Sie es aus.
Geben Sie im Textfeld Name den Namen SampleProjectFeature.Extensions.xml ein, und klicken Sie auf die Schaltfläche Hinzufügen.
Dem Projekt wird im Projektmappen-Explorer die Datei SampleProjectFeature.Extensions.xml hinzugefügt.
Öffnen Sie die Datei SampleProjectFeature.Extensions.xml, und aktualisieren Sie diese so, dass sie mit dem folgenden XML übereinstimmt. Ersetzen Sie das PublicKeyToken, das Sie im vorherigen Verfahren abgerufen haben.
<?xml version="1.0" encoding="utf-8"?> <extensions assembly="" version="1" xmlns="urn:Microsoft.Data.Schema.Extensions" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:Microsoft.Data.Schema.Extensions Microsoft.Data.Schema.Extensions.xsd"> <extension type=" MyCompany.SampleProjectFeature.SampleProjectFeature" assembly="SampleProjectFeature, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nnnnnnnnnnnnnnnn" enabled="true"/> </extensions>
Klicken Sie im Menü Datei auf Speichern.
Ändern Sie dann die Eigenschaften der Datei Extensions.xml, um diese in vsixmanifest einzuschließen.
So schließen Sie SampleProductFeature.Extensions.xml in vsixmanifest ein
Klicken Sie im Projektmappen-Explorer auf SampleProjectFeature.Extensions.xml.
Legen Sie im Eigenschaftenfenster die Eigenschaft Build Action auf Inhalt fest.
Ändern Sie die Include in VSIX-Eigenschaft in True.
Klicken Sie im Menü Datei auf Alle speichern.
Klicken Sie im Menü Erstellen auf Build SampleProjectFeature.
Die Datei vsixmanifest wird aktualisiert. Anschließend können Sie die Projektfunktion testen.
Testen der Projektfunktion
Zum Testen der Projektfunktion muss die Funktion zunächst erstellt werden. Anschließend können Sie F5 drücken, um den experimentellen Build von Visual Studio zu starten.
So erstellen und testen Sie die Datenbankprojektfunktion
Klicken Sie im Menü Projekt auf Erstellen.
Das Projekt sollte erfolgreich erstellt werden.
Drücken Sie F5, um das Paket im experimentellen Build von Visual Studio auszuführen.
Eine experimentelle Instanz von Visual Studio wird angezeigt. Im Menü "Extras" wird der Befehl "Toggle Project Loaded Dialogs" angezeigt.
Zeigen Sie im Menü Datei auf Öffnen, und klicken Sie auf Projekt/Projektmappe.
Navigieren Sie zu dem Datenbankprojekt (DBPROJ-Datei), das Sie öffnen möchten, und klicken Sie auf Öffnen.
Beim Laden des Datenbankprojekts wird ein Dialogfeld mit der Meldung "Simple Project Feature In ProjectLoaded Event" angezeigt.
An diesem Punkt können Sie die Projektfunktion anpassen, um weitere Funktionen hinzuzufügen.
Nächste Schritte
Wenn Sie die Funktion kopieren, die Sie in dieser exemplarischen Vorgehensweise als Ausgangspunkt für eine eigene Arbeit erstellt haben, müssen Sie Folgendes ausführen:
Geben Sie der Erweiterung einen eindeutigen Namen
Weisen Sie der Erweiterung eine eindeutige GUID zu
Wenn Sie mit dem Assistenten für Visual Studio-Integrationspakete ein neues Paket erstellen, wird automatisch eine neue GUID erstellt.
Damit das Paket in regulären Instanzen von Visual Studio verfügbar ist, müssen Sie es registrieren. Weitere Informationen zu VSPackages finden Sie unter:
Siehe auch
Aufgaben
How to: Troubleshoot VSPackages
Konzepte
Erweitern der Datenbankfunktionen von Visual Studio
Übersicht über Datenbank- und Serverprojekte
Weitere Ressourcen
Erstellen von benutzerdefinierten Funktionen für Datenbankprojekte
Änderungsprotokoll
Datum |
Versionsgeschichte |
Grund |
---|---|---|
Juli 2010 |
Kleinere Korrektur an der Datei Extensions.xml vorgenommen, um ein von Kunden angegebenes Problem zu beheben. |
Kundenfeedback. |