我在XAML开发中广泛使用宏来查看ViewModel属性。我在WCF中更多地使用它们来生成Message和DataContract属性。
令我失望的是,我构建的宏在Visual Studio 2012中无法使用。
我正在谈论的一个例子,对于VM,我会输入类似的内容。
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");
}
}
我正在寻找有关丢失宏的其他解决方案的想法。
答案 0 :(得分:64)
最简单的宏替代方法是创建加载项。我知道,我知道,我也不为此感到兴奋,但实际上却非常容易。它有三个简单的部分:
Addins
目录。我们将a simple macro I wrote to show the Start Page after closing a solution转为加载项。
现在你有了一个加载项目。这是你用它做的事情:
打开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
(来自您项目的构建目录;例如bin \ Debug或bin \ Release)将这两个文件放在VS 2012加载项目录中,可能位于此处:
C:\Users\[your user name]\Documents\Visual Studio 2012\Addins
然后退出并重新启动Visual Studio,您应该看到您的加载项正常工作。您还应该在转到工具>时看到它列出加载项管理器。
虽然这比打开宏编辑器并将宏代码放在那里更麻烦,但它确实有一个优点,就是你可以使用你想要的任何语言,而不是被卡在一些有点脆弱的VB-像过去版本的Visual Studio中的编辑器一样。
答案 1 :(得分:12)
我会坚持将文本剪切成Notepad++并在那里使用宏,然后粘贴回来。很遗憾,Visual Studio 2012中没有这个功能......
答案 2 :(得分:12)
Visual Commander扩展(由我开发)是Visual Studio 2012/2013/2015中宏的替代方法。您甚至可以在新的VB命令中重用现有的Visual Studio宏代码。
答案 3 :(得分:5)
Visual Studio中有一个加载项VSScript,它替换了缺少的宏功能。虽然它不使用Visual Basic,但使用Lua脚本语言,但您可能想要尝试它。
有一个带IntelliSense的录像机,宏代码编辑器窗口和一个简单的调试器。该加载项还支持早期版本的Visual Studio,因此如果您更喜欢Lua语言而不是Visual Basic,则可以使用它而不是原始的Visual Studio宏。
答案 4 :(得分:3)
我很悲伤地看到宏不攻自破了。您可以使用正则表达式搜索来替换替换,并在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
除了Macros更适合的属性名称的大写之外,这将获得一切。
但正则表达式方法的一个优点是输入不是那么简单(例如数据库表DDL语句)。
以下是来自MSDN的几个有用链接:
答案 5 :(得分:2)
我使用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\); \\}\\}
答案 6 :(得分:1)
答案 7 :(得分:1)
Visual Studio 2012缺少宏让我失望,因为我有一些我一直用字面插入标准的一点点文本和一个按键。所以我编写了一个非常简单的脚本扩展性包VSScripts,它允许从命令行程序中操作当前选择。
这并不是声称是旧宏系统的全面替代,并且它不提供键盘宏,但它确实可以重新创建多种类型的文本操作宏。
答案 8 :(得分:1)
这是我为保持宏功能所做的工作......
新项目 - > 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();
...
转到菜单工具 - > 选项...... - > 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中添加一个函数(和按钮(MenuCommand) ))在每个初始化函数中。它可以在同一个项目中完成。
我使用这个项目用旧的宏代码创建几个新的'工具',然后将我的键映射到它们。预先做了很多工作(和头痛),但没有宏的滞后时间。
可能有一种方法可以在不占用工具菜单的情况下执行此操作。我昨晚开始关注这个问题并最终开始工作,所以我现在已经完成了它(至少在微软决定放弃它之前)。
答案 9 :(得分:0)
我个人喜欢这个 - Visual Commander扩展允许您在Visual Studio中自动执行重复性任务。