Visual Studio 2012中宏的替代方法

kfr*_*sty 51 visual-studio-macros visual-studio-2012

我在XAML开发中广泛使用宏来查看ViewModel属性.我在WCF中更多地使用它们来生成Message和DataContract属性.

令我失望的是,我构建的宏在Visual Studio 2012中无法使用.

我正在谈论的一个例子,对于VM,我会输入这样的东西.

int id;
string name;
Run Code Online (Sandbox Code Playgroud)

选择两行,运行宏并最终结束

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");
   }
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找其他解决丢失宏的解决方案的想法.

Rya*_*ndy 65

最简单的宏替代方法是创建加载项.我知道,我知道,我对此也不感兴趣,但实际上它非常简单.它有三个简单的部分:

  1. 创建宏项目,逐步完成向导UI.
  2. 写下你的代码.
  3. 将宏的.addin和.dll文件复制到Visual Studio Addins目录.

让我们看一个简单的宏,我写完后在关闭解决方案后将其显示为一个加载项.

创建宏项目

  • 运行VS 2012并创建一个新项目.
  • 转到模板>其他项目类型>可扩展性,然后选择Visual Studio加载项.
  • 给它一个名字,比如ShowStartPage.
  • 单击确定.这将打开加载项向导.
  • 单步执行向导,选择:
    • 编程语言:我们将使用C#
    • 应用程序主机:应选择VS 2012
    • 加载项的名称和说明
    • 在加载项选项页面上,仅选中第二个选项("我希望我的加载项在主机应用程序启动时加载")
    • 暂时跳过About Box的内容,然后单击Finish.

现在你有了一个加载项目.这是你用它做的:

写下代码

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

在类级别添加此代码:

SolutionEvents solutionEvents;
Run Code Online (Sandbox Code Playgroud)

将该代码添加到该OnConnection方法的_addInInstance = (AddIn)addInInst;行后面:

solutionEvents = _applicationObject.Events.SolutionEvents;

solutionEvents.AfterClosing += () =>
{
    _applicationObject.ExecuteCommand("View.StartPage");
};
Run Code Online (Sandbox Code Playgroud)

点击"运行"按钮测试您的代码.启动Visual Studio 2012的新实例,并加载您的加载项.现在测试加载项并确保它正常工作.(打开一个解决方案,然后关闭它;当你这样做时,Start Page应该返回.)

部署它

一旦加载项工作,要在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版本.

  • 对于我想要一次又一次地运行的自定义命令(特别是使用键绑定),我检查了"是",创建了一个"工具"菜单项......并在`之间的`Exec()`方法中添加了我的代码. `if(commandName == ...`和`processed = true;`. (7认同)

joh*_*son 12

我会坚持将文本切割成Notepad ++并在那里使用宏,然后粘贴回来.很遗憾,Visual Studio 2012中没有这个功能......


Ser*_*sov 12

视觉指挥官延长(由我开发)是在Visual Studio 2012/2013/2015的宏替代.您甚至可以在新的VB命令中重用现有的Visual Studio宏代码.


小智 5

Visual Studio 有一个加载项VSScript,它取代了缺少的宏功能.虽然它不使用Visual Basic,但是使用Lua脚本语言,您可能想尝试一下.

有一个带IntelliSense的记录器,宏代码编辑器窗口和一个简单的调试器.该加载项还支持早期版本的Visual Studio,因此如果您更喜欢Lua语言而不是Visual Basic,则可以使用它而不是原始的Visual Studio宏.


Kuf*_*ffs 1

查看http://devexpress.com/coderush

模板功能几乎可以满足您的需求。

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