Ich verwende Makros ausgiebig für ViewModel-Eigenschaften in der XAML - Entwicklung. Ich verwende sie noch mehr in WCF , um Message- und DataContract-Eigenschaften zu generieren.
Zu meiner Enttäuschung sind die von mir erstellten Makros in Visual Studio 2012 nicht verwendbar.
Ein Beispiel für das, worüber ich spreche, würde ich für eine VM so etwas eingeben.
int id;
string name;
Wählen Sie beide Zeilen aus, führen Sie ein Makro aus und beenden Sie mit
private int _id;
private string _name;
public int Id
{
get {return _id;}
set
{
if(_id != value)
{
_id = value;
RaisePropertyChanged("Id");
}
}
public string Name
{
if(_name != value)
{
_name = value;
RaisePropertyChanged("Name");
}
}
Ich bin auf der Suche nach Ideen für andere Lösungen, die sich mit dem Verlust von Makros beschäftigen.
Die einfachste Alternative zu Makros ist das Erstellen von add-ins. Ich weiß, ich weiß, ich war auch nicht begeistert, aber es ist überraschend einfach. Es gibt drei einfache Teile:
Addins
-Verzeichnis von Visual Studio.Nehmen wir ein einfaches Makro, das ich geschrieben habe, um die Startseite nach dem Schließen einer Lösung anzuzeigen und daraus ein Add-In zu machen.
Jetzt haben Sie ein Add-In-Projekt. Folgendes tun Sie damit:
Öffnen Sie die Connect.cs
-Datei. (Möglicherweise ist es bereits geöffnet. Einige der "DTE" -Dinge sollten bekannt vorkommen.)
Fügen Sie diesen Code auf Klassenebene hinzu:
SolutionEvents solutionEvents;
Fügen Sie der OnConnection
-Methode diesen Code direkt nach der _addInInstance = (AddIn)addInInst;
-Zeile hinzu:
solutionEvents = _applicationObject.Events.SolutionEvents;
solutionEvents.AfterClosing += () =>
{
_applicationObject.ExecuteCommand("View.StartPage");
};
Klicken Sie auf die Schaltfläche "Ausführen", um Ihren Code zu testen. Eine neue Instanz von Visual Studio 2012 wird mit dem geladenen Add-In gestartet. Testen Sie nun das Add-In und stellen Sie sicher, dass es funktioniert. (Öffnen Sie eine Lösung und schließen Sie sie. Die Startseite sollte dann wieder angezeigt werden.)
Wenn das Add-In ordnungsgemäß funktioniert, müssen Sie nur zwei Dateien bereitstellen, um es regelmäßig mit Visual Studio 2012 verwenden zu können:
ShowStartPage.AddIn
(aus dem Hauptprojektverzeichnis)ShowStartPage.dll
(aus dem Build-Verzeichnis Ihres Projekts; z. B. bin\Debug oder bin\Release)Fügen Sie diese beiden Dateien in Ihr VS 2012-Add-Ins-Verzeichnis ein, das sich wahrscheinlich hier befindet:
C:\Users\[your user name]\Documents\Visual Studio 2012\Addins
Beenden Sie anschließend Visual Studio, und starten Sie es erneut. Das Add-In sollte funktionieren. Es sollte auch aufgelistet angezeigt werden, wenn Sie zu Extras> Add-In-Manager wechseln.
Dies ist zwar etwas ärgerlicher als das Öffnen des Makro-Editors und das Einfügen des Makrocodes, hat jedoch den Vorteil, dass Sie jede gewünschte Sprache verwenden können, anstatt mit dem etwas flockigen, VB-ähnlichen Editor festgefahren zu sein frühere Versionen von Visual Studio.
Die Erweiterung Visual Commander (von mir entwickelt) ist eine Alternative zu Makros in Visual Studio 2012/2013/2015. Sie können sogar Ihren vorhandenen Visual Studio-Makrocode in neuen VB -Befehlen wiederverwenden.
Ich bleibe dabei, den Text in Notepad ++ zu schneiden, dort Makros zu verwenden und dann wieder einzufügen. Schade, dass das Feature in Visual Studio 2012 nicht mehr vorhanden ist ...
Für Visual Studio gibt es ein Add-In, VSScript , das die fehlende Makrofunktionalität ersetzt. Obwohl es nicht Visual Basic verwendet, sondern die Skriptsprache Lua , möchten Sie es vielleicht ausprobieren.
Es gibt einen Rekorder, ein Makro-Code-Editor-Fenster mit IntelliSense und einen einfachen Debugger. Das Add-In unterstützt auch frühere Versionen von Visual Studio. Wenn Sie die Sprache Lua anstelle von Visual Basic bevorzugen, können Sie es anstelle der ursprünglichen Visual Studio-Makros verwenden.
Ich war sehr traurig, dass Macros auch gehen musste. Sie können Substitutionen mithilfe der Suche nach regulären Ausdrücken und in Visual Studio 2012 ersetzen. In Ihrem Fall:
Finden:
(.*) (.*);
Ersetzen mit:
private $1 _$2;\npublic $1 $2\n{\n get {return _$2;}\n set\n {\n if(_$2 = value;\n RaisePropertyChanged("$2");\n }\n}\n
Damit erhalten Sie alles außer der Großschreibung von Eigenschaftsnamen, für die Macros besser geeignet wäre.
Ein Vorteil der Methode mit regulären Ausdrücken ist jedoch, wenn die Eingabe nicht so einfach ist (z. B. DDL-Anweisungen für Datenbanktabellen).
Hier einige nützliche Links von MSDN:
Ich verwende Notepad ++ mit regulären Ausdrücken wie folgt:
Finden:
public (.\*) (.)(.*) \\{ get; set; \\}
Ersetzen:
private \1 \l(\2)\3; \r\n public \1 \2\3 \\{ get \\{ return \l(\2)\3; \\} \r\n set \\{ \l(\2)\3 = value; OnPropertyChanged\(para => this\.\2\3\); \\}\\}
Das Fehlen von Makros in Visual Studio 2012 brachte mich in Bedrängnis, da ich einige habe, die ich buchstäblich ständig verwende, um kleine Standardtexte mit einem einzigen Tastendruck einzufügen. Also habe ich ein sehr einfaches Erweiterungspaket für Skripte geschrieben, VSScripts , das die Manipulation der aktuellen Auswahl über ein Befehlszeilenprogramm ermöglicht.
Dies erhebt nicht den Anspruch, ein umfassender Ersatz für das alte Makrosystem zu sein, und bietet keine Tastaturmakros, es ermöglicht jedoch die Neuerstellung vieler Arten von Textbearbeitungsmakros.
Check out http://devexpress.com/coderush
Die Vorlagenfunktion macht so ziemlich was Sie wollen.
Es gibt auch eine kostenlose "Express" -Version.
So habe ich meine Makrofunktionalität beibehalten ...
Neues Projekt -> Installed.Templates.Visual C # .Extensibility.Visual Studio Package
Assistent Seite 1 von 7
language = C#
gen new key is fine, or use another if you have one
assistent Seite 3 von 7
check "menu command"
Assistent Seite 7 von 7
uncheck both integration and unit test project options
Klicken Sie auf Fertig stellen
In der CS-Datei:
using EnvDTE;
using EnvDTE80;
...
private void MenuItemCallback(object sender, EventArgs e)
{
MenuCommand cmd = sender as MenuCommand;
// This should start to look like familiar macro code...
EnvDTE80.DTE2 dte2 = Package.GetGlobalService(typeof(EnvDTE.DTE)) as DTE2;
TextSelection selection = (TextSelection)dte2.ActiveDocument.Selection;
dte2.UndoContext.Open("macro command replacement");
selection.Text = "inserted from macro replacement";
selection.NewLine(1);
dte2.UndoContext.Close();
...
Gehen Sie in das Menü Tools -> Options ... -> environment.keyboard und ordnen Sie Ihrem Werkzeug einen Tastendruck zu
Mapping theme : Visual C# 2005
Command : Tool.yourFunctionName (functions defined in the .vsct file)
Wenn Sie mehr als einen Befehl wünschen, müssen Sie Menü-IDs in den PkgCmdID.cs, Guids in Guids.cs, Layouts in .vsct und eine Funktion in der * package.cs (und Schaltfläche (MenuCommand) im Funktion initialisieren) für jeden. Es kann alles im selben Projekt gemacht werden.
Ich habe dieses Projekt verwendet, um mehrere neue "Tools" mit meinem alten Makrocode zu erstellen, und meine Schlüssel darauf zugeordnet. Es ist viel mehr Arbeit (und Kopfschmerzen) von vornherein, hat aber nicht die Verzögerungszeit, die Makros hatten.
Es gibt wahrscheinlich eine Möglichkeit, dies zu tun, ohne die Werkzeugmenüs aufzurufen. Ich habe gestern Abend angefangen, mir das anzuschauen und habe es endlich fertig gebracht, also bin ich damit fertig (zumindest bis Microsoft beschließt, das auch fallen zu lassen).
Ich persönlich mag diese - Visual Commander -Erweiterung, mit der Sie sich wiederholende Aufgaben in Visual Studio automatisieren können