Visual Studio 2022中Dte.LaunchWizard无法弹出New Item对话框
解决Visual Studio 2022中调用项模板无法弹出New Item对话框的问题
针对使用EnvDTE.LaunchWizard或ItemOperations.AddNewItem添加项时,无法弹出New Item对话框、仅静默用默认名称创建的问题,可尝试以下解决方案:
1. 修正LaunchWizard参数顺序与内容
VS2022中vsWizardAddItem类型向导的参数序列有严格要求,你当前的参数顺序可能存在偏差,建议调整为官方标准序列:
var template = ((Solution2)dte.Solution).GetProjectItemTemplate(templateName, "CSharp"); object[] parameters = new object[] { Constants.vsWizardAddItem, dte.Solution.FullName, item.ProjectItems, item.Properties.Item("FullPath").Value?.ToString(), "Bag", string.Empty, false, string.Empty }; var cached = dte.SuppressUI; dte.SuppressUI = false; try { int result = dte.LaunchWizard(template, ref parameters); // 可通过result值排查错误:0为成功,非0表示向导执行异常 } finally { dte.SuppressUI = cached; }
2. 检查项模板的.vstemplate配置
若使用自定义项模板,需确保模板允许弹出名称输入对话框:
打开模板的.vstemplate文件,确认<TemplateData>节点中包含:
<PromptForFileName>true</PromptForFileName>
若该值为false,模板会直接使用默认名称创建,不会触发对话框。
3. 使用ItemOperations.AddNewItem的简化调用
尝试直接调用ItemOperations.AddNewItem,同时确保SuppressUI已关闭:
var cachedSuppressUI = dte.SuppressUI; dte.SuppressUI = false; try { dte.ItemOperations.AddNewItem(template, "Bag"); } finally { dte.SuppressUI = cachedSuppressUI; }
4. 确保在UI线程执行操作
VS的UI交互必须在主线程执行,若代码在后台线程调用,需切换到UI线程:
System.Windows.Application.Current.Dispatcher.Invoke(() => { var cached = dte.SuppressUI; dte.SuppressUI = false; try { dte.LaunchWizard(template, ref prms); } finally { dte.SuppressUI = cached; } });
内容的提问来源于stack exchange,提问作者dingdonglars
相关产品推荐
相关产品推荐

