Bewährte Methoden für die Implementierung eines Quellcodeverwaltungs-Plug-Ins
Die folgenden technischen Details können Ihnen dabei helfen, ein Quellcodeverwaltungs-Plug-In in Visual Studio zuverlässig zu implementieren.
Probleme bei der Speicherverwaltung
In den meisten Fällen gibt die integrierte Entwicklungsumgebung (Integrated Development Environment, IDE), die den Aufrufer darstellt, frei und weist Arbeitsspeicher zu. Das Quellcodeverwaltungs-Plug-In gibt Zeichenfolgen und andere Elemente in vom Aufrufer zugewiesenen Puffern zurück. Ausnahmen werden in Beschreibungen bestimmter Funktionen, in denen sie auftreten, aufgeführt.
Arrays von Dateinamen
Wenn ein Array von Dateien übergeben wird, wird es nicht als zusammenhängendes Array von Dateinamen übergeben. Sie wird als Array von Zeigern an Dateinamen übergeben. Im SccGet werden die Dateinamen beispielsweise vom lpFileNames
Parameter übergeben, wobei lpFileNames
es sich tatsächlich um einen Zeiger auf einen char **
. lpFileNames
[0] ist ein Zeiger auf den Vornamen, lpFileNames
[1] ist ein Zeiger auf den zweiten Namen usw.
Großes Modell
Alle Zeiger sind 32 Bit, auch auf 16-Bit-Betriebssystemen.
Vollqualifizierte Pfade
Wenn Dateinamen oder Verzeichnisse als Argumente angegeben werden, müssen sie vollqualifizierte Pfade oder UNC-Pfade sein, ohne dass die umgekehrten Schrägstriche enden. Es liegt in der Verantwortung des Quellcodeverwaltungs-Plug-Ins, diese in relative Pfade zu übersetzen, wenn dies eine Anforderung des zugrunde liegenden Quellcodeverwaltungssystems ist.
Angeben eines vollqualifizierten Pfads für die registrierte DLL
Die IDE lädt DLLs nicht mehr aus relativen Pfaden (z . B. .\NewProvider.dll). Ein vollständiger Pfad der DLL muss angegeben werden (z . B. C:\Providers\NewProvider.dll). Diese Anforderung stärkt die Sicherheit der IDE, indem verhindert wird, dass nicht autorisierte oder imitierte Quellcodeverwaltungs-DLLs geladen werden.
Überprüfen Eines vorhandenen VSSCI-Plug-Ins beim Installieren des Quellcodeverwaltungs-Plug-Ins
Ein Benutzer, der ihr Quellcodeverwaltungs-Plug-In installieren möchte, verfügt möglicherweise bereits über ein vorhandenes Quellcodeverwaltungs-Plug-In auf dem Computer. Das Installationsprogramm (Setup) für das von Ihnen erstellte Plug-In sollte bestimmen, ob es vorhandene Werte für die relevanten Registrierungsschlüssel gibt. Wenn diese Schlüssel bereits festgelegt sind, sollte ihr Installationsprogramm den Benutzer fragen, ob Sie Ihr Plug-In als Standard-Quellcodeverwaltungs-Plug-In registrieren und das bereits installierte Plug-In ersetzen möchten.
Fehlerergebniscodes und Berichterstellung
Der SCC_OK
Rückgabecode für eine Quellcodeverwaltungsfunktion gibt an, dass der Vorgang für alle Dateien erfolgreich war. Wenn der Vorgang fehlschlägt, wird erwartet, dass der letzte aufgetretene Fehlercode zurückgegeben wird.
Die Regel für die Berichterstellung besteht darin, dass die IDE, wenn ein Fehler in der IDE auftritt, für die Berichterstellung verantwortlich ist. Wenn im Quellcodeverwaltungssystem ein Fehler auftritt, ist das Quellcodeverwaltungs-Plug-In für die Berichterstellung verantwortlich. Beispielsweise würden derzeit keine Dateien von der IDE gemeldet, während diese Datei bereits ausgecheckt vom Plug-In gemeldet wird.
Die Kontextstruktur
Während des Aufrufs von SccInitialize übergibt der Aufrufer den ppvContext
Parameter, bei dem es sich um ein nicht initialisiertes Handle handelt, an eine leere. Das Quellcodeverwaltungs-Plug-In kann diesen Parameter ignorieren oder eine Struktur beliebiger Art zuordnen und einen Zeiger auf diese Struktur in den übergebenen Zeiger setzen. Die IDE versteht diese Struktur nicht, übergibt jedoch einen Zeiger an diese Struktur an jeden anderen Aufruf des Plug-Ins. Dadurch werden wertvolle Kontextcacheinformationen für das Plug-In bereitgestellt, mit denen sie globale Zustandsinformationen Standard, die über Funktionsaufrufe hinweg beibehalten werden, ohne globale Variablen zu verwenden. Das Plug-In ist dafür verantwortlich, die Struktur bei einem Aufruf der SccUninitialize freizugeben.
Wenn das Plug-In das SCC_CAP_REENTRANT
Bit in SccInitialize (insbesondere im lpSccCaps
Parameter) festlegt, werden mehrere Kontextstrukturen verwendet, um alle geöffneten Projekte nachzuverfolgen.
Bitflags und andere Befehlsoptionen
Für jeden Befehl, z. B. SccGet, kann die IDE viele Optionen angeben, die das Verhalten des Befehls ändern.
Die API unterstützt die Einstellung bestimmter Optionen durch die IDE über den fOptions
Parameter. Diese Optionen werden in Bitflags beschrieben, die von bestimmten Befehlen zusammen mit den von ihnen beeinflussten Befehlen verwendet werden. Im Allgemeinen sind dies Optionen, für die der Benutzer nicht aufgefordert wird.
Die meisten benutzerkonfigurierbaren Einstellungsoptionen sind auf diese Weise nicht definiert, da sie in den Plug-Ins für die Quellcodeverwaltung sehr unterschiedlich sind. Daher ist der empfohlene Mechanismus eine Schaltfläche "Erweitert ". Beispielsweise zeigt die IDE im Dialogfeld "Abrufen " nur Informationen an, die sie versteht, aber auch eine Schaltfläche "Erweitert ", wenn das Plug-In Optionen für diesen Befehl enthält. Wenn der Benutzer auf die Schaltfläche "Erweitert " klickt, ruft die IDE die SccGetCommandOptions auf, damit das Quellcodeverwaltungs-Plug-In den Benutzer zur Eingabe von Informationen auffordert, z. B. Bitflags oder ein Datum/Uhrzeit. Das Plug-In gibt diese Informationen in einer Struktur zurück, die während des SccGet
Befehls zurückgesendet wird.