You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:01:25