我正在尝试创建一个visual studio包,特别是我想在项目上下文菜单中创建一个新的菜单选项。就像这个:
http://www.diaryofaninja.com/blog/2014/02/18/who-said-building-visual-studio-extensions-was-hard
我已经有菜单选项显示:
但现在我想配置回调以基于模板(自定义视觉工作室模板)创建文件,就像我们点击添加>类 但是,不要使用类模板,而是使用我在自定义列表中创建的模板。避免在列表中搜索模板的时间。
在我遵循的示例中,创建了“添加新服务”#39; buttom,在第一个例子中展示了如何创建一个弹出窗口:
IVsUIShell uiShell = (IVsUIShell)GetService(typeof(SVsUIShell));
Guid clsid = Guid.Empty;
int result;
Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(uiShell.ShowMessageBox(
0,
ref clsid,
"NewService",
string.Format(CultureInfo.CurrentCulture, "Inside {0}.MenuItemCallback()", this.ToString()),
string.Empty,
0,
OLEMSGBUTTON.OLEMSGBUTTON_OK,
OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST,
OLEMSGICON.OLEMSGICON_INFO,
0, // false
out result));
我想应该有更多服务可以使用这个VSPackages,但我在参考文献中找不到类似的方法:https://msdn.microsoft.com/en-us/library/bb166217.aspx
您能告诉我从哪里可以找到执行此操作的方法。或者如何归档我的目标。
更新
我正在尝试这个:
var dte = (DTE)GetService(typeof(DTE));
dte.ItemOperations.NewFile(@"General\Text File", "file.txt","7651A701-06E5-11D1-8EBD-00A0C90F26EA");
但我得到了这个例外:
类型' System.Runtime.InteropServices.COMException'的例外情况发生在NewService.dll但未在用户代码中处理
附加信息:来自HRESULT的无效类字符串异常:0x800401F3(CO_E_CLASSSTRING)
答案 0 :(得分:1)
解决!
我使用了以下代码:
private void MenuItemCallback(object sender, EventArgs e)
{
var dte = (DTE)GetService(typeof(DTE)) as EnvDTE80.DTE2;
var template = @"C:\Users\JuanAntonio\Documents\Visual Studio 2013\Templates\ItemTemplates\MyTemplate.vstemplate";
dte.Solution.Projects.Item(1).ProjectItems.AddFromTemplate(template, "Template.cs");
}