我用宏广泛用于视图模型属性XAML开发。 我用他们更在WCF生成信息和DataContract属性。
我很失望,我已经建立了宏不会是在Visual Studio 2012中使用。
我说的是,对于虚拟机的一个例子,我将进入这样的事情。
int id;
string name;
选择两条线,运行宏,并结了
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");
}
}
我在寻找与失去宏的其他解决方案协议的想法。
宏最简单的替代方法是创建加载项 。 我知道,我知道,我是不是很兴奋下去,但它实际上是非常容易的。 有三个简单的部分吧:
- 创建宏项目,通过向导UI步进。
- 编写代码。
- 宏的.addin和.dll文件复制到Visual Studio
Addins
的目录。
让我们以一个简单的宏我写关闭后的解决方案,以显示起始页 ,并把它变成一个加载项。
创建宏项目
- 运行VS 2012,并创建一个新的项目。
- 转到模板>其他项目类型>扩展,并选择Visual Studio的外接程序 。
- 给它一个名称,如ShowStartPage。
- 单击确定。 这带来了外接向导。
- 在向导中,选择:
- 编程语言:我们将使用C#
- 应用主机:VS 2012应选择
- 名称和描述您的加载
- 在外接选项页,勾选仅第二个选项(“我想我的外接加载时主机应用程序启动”)
- 跳过关于对话框的东西,现在,并单击完成。
现在你有一个附加项目。 这里是你用它做什么:
编写代码
打开Connect.cs
文件。 (它可能已经打开。一些“DTE”的东西应该很熟悉。)
在添加类级别的代码:
SolutionEvents solutionEvents;
此代码添加到OnConnection
方法中,后右_addInInstance = (AddIn)addInInst;
线:
solutionEvents = _applicationObject.Events.SolutionEvents;
solutionEvents.AfterClosing += () =>
{
_applicationObject.ExecuteCommand("View.StartPage");
};
点击“运行”按钮来测试你的代码。 的Visual Studio 2012的新实例启动时,您的加载项加载。 现在测试加载项,并确保它的工作原理。 (打开一个解决方案,然后将其关闭。当你开始页应该返回)
它部署
一旦外接作品,与Visual Studio 2012经常使用它,你只需要部署两个文件:
-
ShowStartPage.AddIn
(从你的主项目目录) -
ShowStartPage.dll
(从项目的build目录;例如BIN \ Debug或Bin \发布)
把那些两个文件在VS 2012外接程序目录,这里大概位于:
C:\Users\[your user name]\Documents\Visual Studio 2012\Addins
然后退出并重新启动Visual Studio,你应该看到您的加载工作。 你也应该看到,当你去工具将其列为>加载项管理器。
虽然这是一个比较讨厌不仅仅是打开宏编辑器,并在那里坚持宏代码的,它也有可以使用的,而不是被卡住有些脆弱的VB-类的编辑器在任何你想要的语言,其优点过去版本的Visual Studio。
在视觉指挥官延长(由我开发)是在Visual Studio 2012/2013/2015的宏替代。 你甚至可以重复使用新的VB指令现有的Visual Studio宏代码。
我会坚持到剪切文本到记事本+ +和使用宏在那里,然后将其粘贴回去。 这是一个耻辱的功能不是在Visual Studio 2012的任何更多...
有一个附加的, VSScript ,为Visual Studio它取代丢失的宏功能。 虽然它没有使用Visual Basic,但Lua的脚本语言,你可能想尝试一下。
有一个记录器,智能感知宏代码编辑窗口,和一个简单的调试器。 该插件还支持早期版本的Visual Studio,所以如果你喜欢Lua语言,而不是Visual Basic中,你可以用它代替原来的Visual Studio宏。
我很悲伤地看到宏不攻自破了。 您可以使用正则表达式搜索替换亲近和Visual 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
这将让你除了这些宏将是更好的属性名称的大小写的一切。
但正则表达式的方法的一个优点是当输入并不是那么简单(如数据库表DDL语句)。
这里有一对夫妇从MSDN有用的链接:
正则表达式替换
使用Visual Studio中的正则表达式
我用记事本+ +正则表达式是这样的:
找:
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
模板功能的作用几乎你想要什么。
有一个免费的“快车”版本太多。
的Visual Studio 2012的缺乏宏渐渐我失望,因为我有几个,我用从字面上所有的时间与一个按键插入文本的标准小位。 所以我写了一个非常简单的脚本扩展包, VSScripts ,它允许通过命令行程序当前选择的操作。
这并不算得上是旧宏系统的一些包罗万象的全部更换,并且它不提供键盘宏,但它确实有可能重新许多类型的文本操作宏。
这是我做了让我的宏功能...
- 下载并安装Visual Studio 2012 SDK 在这里 (它包含了“Visual Studio的包”模板)
新建项目 - > Installed.Templates.Visual C#.Extensibility.Visual工作室包
向导页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实例将加载的软件包。
- 如发现在工具菜单顶部的第一个条目的命令。 点击它,看它是否工作。
- 要安装真正的,去你的bin \调试(/释放)的.vsix文件目录,然后双击
- 应该安装运行下一次
进入菜单工具 - > 选项- > environment.keyboard和按键映射到你的工具
Mapping theme : Visual C# 2005 Command : Tool.yourFunctionName (functions defined in the .vsct file)
如果你想要一个以上的命令,你将需要添加菜单的ID在PkgCmdID.cs,的GUID在Guids.cs,布局在.vsct并在* package.cs的功能(和按钮(MenuCommand)初始化功能),用于每一个。 它都可以在同一个项目来完成。
我用这个项目来创建若干新的“工具”与我的老宏代码,然后映射我的钥匙给他们。 这是一个很多工作(和头痛)前面,但没有滞后时间的宏了。
有可能是一个办法做到这一点,而无需其占用的工具菜单。 我开始寻找这个昨晚终于得到它的工作,所以我用它做现在(至少要等到微软决定也下降这一点)。
我个人很喜欢这一个-的视觉指挥官扩展可以让你在Visual Studio中自动执行重复性任务。