Visual Studio 2012中的macros替代

我在XAML开发中广泛使用macros来实现ViewModel属性。 我在WCF中使用它们来生成Message和DataContract属性。

令我失望的是,我构build的macros在Visual Studio 2012中不会使用。

我正在谈论的一个例子,对于一个虚拟机,我会input这样的东西。

int id; string name; 

select两行,运行macros并结束

 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"); } } 

我正在寻找其他解决scheme处理丢失macros的想法。

macros的最简单的替代方法是创build加载项 。 我知道,我知道,我也不是很兴奋,但是这实际上很容易。 有三个简单的部分:

  1. 创buildmacros项目,单击向导UI。
  2. 写你的代码。
  3. 将macros的.addin和.dll文件复制到Visual Studio Addins目录中。

让我们看一个简单的macros,我写了closures一个解决scheme后,显示开始页面 ,把它变成一个加载项。

创buildmacros项目

  • 运行VS 2012并创build一个新项目。
  • 转到模板>其他项目types>扩展性,然后selectVisual Studio加载项
  • 给它一个名字,比如ShowStartPage。
  • 点击OK。 这带来了加载项向导。
  • 单击向导,select:
    • 编程语言:我们将使用C#
    • 应用程序主机:VS 2012应该被选中
    • 您的加载项的名称和说明
    • 在加载项选项页面上,只勾选第二个选项(“我希望我的加载项在主机应用程序启动时加载”)
    • 跳过关于框的东西,现在,然后单击完成。

现在你有一个加载项目。 这是你用它做的事情:

编写代码

打开Connect.cs文件。 (它可能已经是开放的,一些“DTE”的东西应该看起来很熟悉。)

在课堂级别添加此代码:

 SolutionEvents solutionEvents; 

将此代码添加到OnConnection方法中,正好在_addInInstance = (AddIn)addInInst; 线:

 solutionEvents = _applicationObject.Events.SolutionEvents; solutionEvents.AfterClosing += () => { _applicationObject.ExecuteCommand("View.StartPage"); }; 

点击“运行”button来testing你的代码。 启动Visual Studio 2012的一个新实例,加载加载项。 现在testing加载项,并确保它的工作。 (打开一个解决scheme,然后closures它,当你这样做,开始页面应该返回)。

部署它

一旦加载项工作,要定期使用Visual Studio 2012,您只需要部署两个文件:

  • ShowStartPage.AddIn (从您的主项目目录)
  • ShowStartPage.dll (从您的项目的生成目录;例如bin \ Debug或bin \ Release)

将这两个文件放在您的VS 2012加载项目录中,可能位于:

C:\Users\[your user name]\Documents\Visual Studio 2012\Addins

然后退出并重新启动Visual Studio,您应该看到您的加载项工作。 你也应该看到它,当你去工具>加载项pipe理器。

虽然这比打开macros编辑器并将macros代码粘在那里更麻烦一些,但是它的优点是可以使用任何你想要的语言,而不是被一些类似VB的编辑器以前版本的Visual Studio。

Visual Commander扩展(由我开发)是Visual Studio 2012/2013/2015中的macros的替代方法。 您甚至可以在新的VB命令中重新使用现有的Visual Studiomacros代码。

我会坚持把文本切割成Notepad ++ ,然后在那里使用macros,然后粘贴回来。 这是一个耻辱的function是不是在Visual Studio 2012中…

有一个Visual Studio的加载项VSScript ,用于replace缺less的macrosfunction。 虽然它不使用Visual Basic,但使用Lua脚本语言,但您可能需要尝试一下。

有一个logging器,带有IntelliSense的macros代码编辑器窗口和一个简单的debugging器。 该外接程序还支持早期版本的Visual Studio,所以如果您更喜欢Lua语言而不是Visual Basic,则可以使用它代替原始的Visual Studiomacros。

看到macros也很难过。 你可以使用正则expression式searchclosuresreplace,并replaceVisual Studio 2012.在你的情况:

找:

 (.*) (.*); 

用。。。来代替:

 private $1 _$2;\npublic $1 $2\n{\n get {return _$2;}\n set\n {\n if(_$2 = value;\n RaisePropertyChanged("$2");\n }\n}\n 

这将使你得到一切,除了macros命名的macros命名将更好。

但正则expression式方法的一个优点是input不是那么简单(例如数据库表DDL语句)。

以下是来自MSDN的几个有用链接:

正则expression式中的replace

在Visual Studio中使用正则expression式

我用这样的正则expression式使用Notepad ++:

找:

 public (.\*) (.)(.*) \\{ get; set; \\} 

更换:

 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\); \\}\\} 

检查出http://devexpress.com/coderush

模板function几乎是你想要的。

还有一个免费的“快车”版本。

Visual Studio 2012的macros缺乏让我失望,因为我有一些字面上一直使用一个按键来插入标准的一点点的文本。 所以我写了一个非常简单的脚本可扩展性包VSScripts ,它允许从命令行程序中操作当前的select。

这并没有声称是一个全面的替代旧的macros观系统,它不提供键盘macros,但它确实可以重新创build许多types的文本操纵macros。

以下是我所做的保持我的macrosfunction…

  1. 下载并安装Visual Studio 2012 SDK(它包含“Visual Studio包”模板)
  2. 新项目 – > Installed.Templates.Visual C#.Extensibility.Visual Studio Package

    向导第1页,共7页

     language = C# gen new key is fine, or use another if you have one 

    向导第3页,共7页

     check "menu command" 

    向导第7页,共7页

     uncheck both integration and unit test project options 

    点击完成

  3. 在.cs文件中:

     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(); ... 
  4. 运行该项目。 一个新的Visual Studio实例将从加载的包开始。
  5. find您的命令作为工具菜单顶部的第一个条目。 点击它看它是否工作。
  6. 要真正安装,请进入bin \ debug(/ release)目录,然后双击.vsix文件
  7. 应该在下次运行时进行安装
  8. 转到菜单工具 – > 选项… – > environment.keyboard,并将按键映射到您的工具

     Mapping theme : Visual C# 2005 Command : Tool.yourFunctionName (functions defined in the .vsct file) 

如果您需要多个命令,则需要在PkgCmdID.cs中添加菜单ID,Guids.cs中的Guids,.vsct中的布局以及* package.cs中的函数(和button(MenuCommand)初始化函数)为每个。 它可以在同一个项目中完成。

我用这个项目用我的旧macros代码创build了几个新的“工具”,然后把我的键映射到它们。 事前还有很多工作要做(头痛),但是没有macros的滞后时间。

可能有办法做到这一点,而不必占用工具菜单。 我昨天才开始看这个,最后才开始工作,所以我现在已经完成了(至less在微软决定放弃这个之前)。

我个人喜欢这个 – Visual Commander扩展允许您在Visual Studio中自动执行重复的任务