我当前的项目在整个代码中分散了很多调试预处理器块。这些有意命名为系统_DEBUG和NDEBUG宏,所以我有很多这样的:
// Some code here
#ifdef PROJNAME_DEBUG
//unit tests, assumption testing, etc.
#endif
// code continues
这些块有时会变得相当大,它们的存在有时会抑制代码的可读性。在Visual Studio 2012中,我可以轻松地折叠它们,但是自动将所有这些折叠起来会很好,如果我想看看那里有什么,我可以扩展它们。但是,由于我还有一堆标题保护,我不想折叠所有预处理程序块,只有#ifdef PROJNAME_DEBUG。
我可以这样做吗?
答案 0 :(得分:0)
我认为这是你能够实现的最简单的方案。
您应该首先在C#中创建一个加载项。 (在VS 2013中,他们被弃用:()
在OnConnection方法中,您应该添加命令:
public void OnConnection( object application, ext_ConnectMode connectMode, object addInInst, ref Array custom )
{
_applicationObject = (DTE2)application;
if (connectMode == ext_ConnectMode.ext_cm_AfterStartup || connectMode == ext_ConnectMode.ext_cm_Startup)
{
Commands2 commands = (Commands2)_applicationObject.Commands;
try
{
//Add a command to the Commands collection:
Command command = commands.AddNamedCommand2(_addInInstance, "MyAddinMenuBar", "MyAddinMenuBar", "Executes the command for MyAddinMenuBar", true, 59, ref contextGUIDS, (int)vsCommandStatus.vsCommandStatusSupported + (int)vsCommandStatus.vsCommandStatusEnabled, (int)vsCommandStyle.vsCommandStylePictAndText, vsCommandControlType.vsCommandControlTypeButton);
}
catch (System.ArgumentException)
{
//If we are here, bla, bla... (Auto generated)
}
}
}
注意:您可以在AddNamedCommand2的引用中找到参数的行为方式 模板创建的版本也可以,但天生值得正确命名。
之后,您需要将您的逻辑添加到Exec
方法:
public void Exec( string commandName, vsCommandExecOption executeOption, ref object varIn, ref object varOut, ref bool handled )
{
handled = false;
if (executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault)
{
if (commandName == "MyAddinMenuBar.Connect.MyAddinMenuBar")
{
List<string> args = (varIn as string).Split(' ').ToList();
TextSelection ts;
ts = (TextSelection)_applicationObject.ActiveDocument.Selection;
EditPoint ep = (ts.ActivePoint).CreateEditPoint();
ep.StartOfDocument();
do
{
string actualLine = ep.GetLines(ep.Line, ep.Line + 1);
if (args.TrueForAll(filter => actualLine.Contains(filter)))
{
_applicationObject.ExecuteCommand("Edit.GoTo", ep.Line.ToString());
_applicationObject.ExecuteCommand("Edit.ToggleOutliningExpansion");
}
ep.LineDown();
} while (!ep.AtEndOfDocument);
handled = true;
return;
}
}
}
注意:在exec中检查您给命令的名称。
比你可以建造。
加载项的部署可以通过[ProjectName].AddIn
中的..\Documents\Visaul Studio 20[XY]\AddIns\
文件进行。 (由模板创建,如果您将加载项移动到其他位置,则应复制)
您应该将加载项程序集放在您设置的上述文件的 Assembly 元素的位置。要更改版本,您应该修改 Version 元素中的文本。
部署并启动Studio后,您应该在Tools
菜单中的管理器中激活加载项。
您需要使用C#IDE settigs展开代码文件中的所有可折叠部分( CTRL + M + L )。 这是必需的,因为我发现只有一种方法可以反转崩溃的状态。如果你找到更好的命令,你可以改变它。
接下来,您应该激活命令窗口以使用创建的命令。 现在只需输入命令名称,如下所示:
MyAddinMenuBar.Connect.MyAddinMenuBar #ifdef PROJNAME_DEBUG
希望魔法会发生。
此解决方案独立于您编辑的代码语言,因此非常多功能。