Visual studio 2012 他为每一个设置了PkgCmdID.cs、Guids.cs中的guid、.vsct中的布局和*package.cs中的函数(以及初始化函数中的按钮(MenuCommand))。这一切都可以在同一个项目中完成

Visual studio 2012 他为每一个设置了PkgCmdID.cs、Guids.cs中的guid、.vsct中的布局和*package.cs中的函数(以及初始化函数中的按钮(MenuCommand))。这一切都可以在同一个项目中完成,visual-studio-2012,visual-studio-macros,Visual Studio 2012,Visual Studio Macros,我使用这个项目用我的旧宏代码创建了几个新的“工具”,然后将我的键映射到它们。它的前期工作(和头痛)要多得多,但没有宏所具有的滞后时间 可能有一种方法可以做到这一点,而不必占用工具菜单。我昨晚开始研究这个,最后终于让它开始工作了,所以我现在已经完成了(至少在微软决定放弃这个之前)。这个扩展(由我开发)是Visual Studio 2012/2013/2015中宏的替代品。您甚至可以在新的VB命令中重用现有的Visual Studio宏代码。我个人喜欢这一个-该扩展允许您在Visual Studio

我使用这个项目用我的旧宏代码创建了几个新的“工具”,然后将我的键映射到它们。它的前期工作(和头痛)要多得多,但没有宏所具有的滞后时间


可能有一种方法可以做到这一点,而不必占用工具菜单。我昨晚开始研究这个,最后终于让它开始工作了,所以我现在已经完成了(至少在微软决定放弃这个之前)。

这个扩展(由我开发)是Visual Studio 2012/2013/2015中宏的替代品。您甚至可以在新的VB命令中重用现有的Visual Studio宏代码。

我个人喜欢这一个-该扩展允许您在Visual Studio中自动执行重复任务。

我认为代码片段将是替代方案,或者至少是一个建议。代码片段的问题在于,当我创建DataMembers或MessageContractMembers时,宏会自动计算并填充每个属性的显示顺序。所以我希望有一些替代宏的方法可以提供同样多的灵活性。请看@FrostKris也许你应该接受Kyralessa的回答哇,这是一种提高生产率和代码的很酷的方法。直到现在才知道这件事@FrostKris,你是否有机会在VS2012中找到另一种方法来实现这一点?@Frost Kris,我想知道你是否找到了解决方案,是否愿意分享你的代码?我真的很想看看/使用它。对于我自己想要反复运行的自定义命令(特别是使用键绑定),我选中了
Yes,创建了一个“工具”菜单项…
,并在
Exec()
方法中的
if(commandName==…
handled=true;
。注意,在类级指令中添加此代码是至关重要的。如果使用局部变量,它将被垃圾收集,处理程序将不会被触发。这实际上非常简单且非常灵活,谢谢。在VS2013和VS2015RC中,我找不到Templ下的可扩展性选项ates>其他项目类型。它只有安装和部署以及Visual Studio解决方案。安装后我需要做些什么来获得意见吗?太棒了,很高兴看到社区发现MS失败的地方。看起来他们正在考虑将它们带回Visual Studio的未来版本,因为缺少macro设施在VS 2015中仍然是个问题。非常感谢Sergey!这看起来是一个很棒的工具,但我似乎无法在2015年让它录制宏(我没有在其他VS版本中尝试过)我选择录制宏,然后停止,然后编辑或保存,但代码中没有任何内容。有什么想法吗?@atreeonhill它应该在VS 2015中录制文本编辑命令。请通过以下地址与我联系:SergeyVlasov@vlasovstudio.com用于故障排除。
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");
   }
}
SolutionEvents solutionEvents;
solutionEvents = _applicationObject.Events.SolutionEvents;

solutionEvents.AfterClosing += () =>
{
    _applicationObject.ExecuteCommand("View.StartPage");
};
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\); \\}\\}
(.*) (.*);
private $1 _$2;\npublic $1 $2\n{\n  get {return _$2;}\n  set\n  {\n    if(_$2 = value;\n    RaisePropertyChanged("$2");\n  }\n}\n
language = C#
gen new key is fine, or use another if you have one
check "menu command"
uncheck both integration and unit test project options
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();
    ...
Mapping theme : Visual C# 2005
Command       : Tool.yourFunctionName (functions defined in the .vsct file)