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加载项 。 我知道,我知道,我也不是很兴奋,但是这实际上很容易。 有三个简单的部分:
- 创buildmacros项目,单击向导UI。
- 写你的代码。
- 将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\); \\}\\}
Visual Studio 2012的macros缺乏让我失望,因为我有一些字面上一直使用一个按键来插入标准的一点点的文本。 所以我写了一个非常简单的脚本可扩展性包VSScripts ,它允许从命令行程序中操作当前的select。
这并没有声称是一个全面的替代旧的macros观系统,它不提供键盘macros,但它确实可以重新创build许多types的文本操纵macros。
以下是我所做的保持我的macrosfunction…
- 下载并安装Visual Studio 2012 SDK(它包含“Visual Studio包”模板)
-
新项目 – > 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
点击完成
-
在.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(); ...
- 运行该项目。 一个新的Visual Studio实例将从加载的包开始。
- find您的命令作为工具菜单顶部的第一个条目。 点击它看它是否工作。
- 要真正安装,请进入bin \ debug(/ release)目录,然后双击.vsix文件
- 应该在下次运行时进行安装
-
转到菜单工具 – > 选项… – > 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中自动执行重复的任务
- Visual Studio 2012 Express桌面的限制
- 在VS2012中添加NuGet包作为项目引用的最佳方法?
- 任何人都可以在Visual Studio 2012中findTFS“Unshelve”选项吗?
- 符号文件不加载在Visual Studio 2012中debugging自定义项目
- Visual Studio 2012项目的Mercurial .hgignore
- Visual Studio远程debugging器“无法访问内存位置”function
- MySQL数据源没有出现在Visual Studio中
- 在Visual Studio 2012中进行Googletesting
- Visual Studio 2012中的“首选32位”设置的目的是什么?它实际上是如何工作的?