Ich wollte für eine Weile eine einfache Text-Bearbeitungserweiterung für Visual Studio erstellen, und jetzt habe ich endlich etwas Zeit gefunden, um zu sehen, wie Erweiterungen geschrieben werden. Was ich vorhabe, könnte durch VBA-Makros erreicht werden, aber ich würde es eher als "echte" Erweiterung implementieren; als Lernprozess, und weil ich VBA ehrlich nicht ausstehen kann.Erstellen einer einfachen Text-Bearbeitung von Visual Studio 2010-Erweiterung
Nach einer ordentlichen Portion Googeln, Blog lesen, in MSDN suchen und StackOverflow Posts durchsuchen, denke ich, dass ich genug Informationen gesammelt habe, die ich implementieren kann - aber ich hätte gerne ein Feedback darüber, ob ich mich den Dingen annähere kurz bevor ich weg :)
Hacking starten Was ich möchte, ist:
- Befehle Registrierung, die Benutzer Hotkeys über Extras-> Optionen-> Tastatur binden können.
- Ändern Sie den Textpuffer des aktiven Fensters, wenn Befehle aufgerufen werden.
- Ich weiß nicht wirklich über Menüs oder Symbolleisten, aber wissen, wie es über .vsct Dateien hinzufügen (gibt es bessere Möglichkeiten?)
Für # 1, es scheint, ich habe eine volle VSPackage zu tun , .vsct-Datei und so weiter - es gibt keinen schönen und einfachen MEF-Erweiterungspunkt, mit dem ich umgehen kann? (Vielleicht ein IWpfTextViewCreationListener
exportieren und herumspielen mit manuellen Tastaturkürzel Handhabung - aber das wäre ein wichtiger Hack).
Für # 2, bin ich mir nicht sicher, wie Sie eine ITextBuffer
für das aktive Dokument erhalten. Ich könnte durch DTE.ActiveDocument
gehen, aber ich bin mir nicht sicher, wie man eine ITextBuffer
davon erhält. Alternativ könnte ich etwas in Richtung der ...
var txtMgr = (IVsTextManager)ServiceProvider.GetService(typeof(SVsTextManager));
IVsTextView textViewCurrent;
txtMgr.GetActiveView(true, null, out textView);
IWpfTextView wpfViewCurrent = AdaptersFactory.GetWpfTextView(textView);
ITextBuffer textCurrent = wpfViewCurrent.TextBuffer;
... tun, aber das sieht sicher aus wie ein Umweg, Dinge zu tun?
Danke! Es gibt etwas über das Hinzufügen eines Filters zu jedem VsTextView, das mich ein bisschen ärgert, aber die Lösung * ist * definitiv besser.Schade, man muss sich immer noch mit hässlichem com/ole Vermächtnis auseinandersetzen, aber zumindest ist es minimal und kann abstrahiert werden :) – snemarch