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

如何为项模板配置向导扩展以收集自定义参数并解决加载错误

项模板配置自定义参数表单的正确步骤及加载错误修复

一、先解决DLL加载失败的问题

  • 检查DLL部署位置:Visual Studio加载模板向导DLL时,只会从当前模板的文件夹下读取。必须把MyWizard.dll和它的所有依赖文件,放到和.vstemplate、模板源文件(如.cs)相同的目录里,不能只在配置文件里写引用。
  • 核对DLL的强签名信息:用命令sn -T MyWizard.dll查看DLL的公钥令牌,确保和.vstemplate里PublicKeyToken的字符串完全一致;同时检查DLL的程序集版本、文件版本是否为1.0.0.0,和配置里的Version值匹配。
  • 匹配目标框架:向导DLL必须编译为与VS版本兼容的.NET Framework版本,比如VS2022对应.NET Framework 4.8,不能用.NET Core或.NET 5及以上版本。

二、正确编写.vstemplate的WizardExtension配置

确保配置节点格式准确,示例如下:

<WizardExtension>
  <Assembly>MyWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxx</Assembly>
  <FullClassName>MyWizard.MyCustomWizard</FullClassName>
</WizardExtension>
  • 必须指定FullClassName:即DLL中实现IWizard接口的类的完整命名空间加类名,不能写错。
  • 所有属性(Version、Culture、PublicKeyToken)不能省略,且必须和DLL的实际信息完全一致。

三、正确实现IWizard接口收集参数

向导类必须完整实现Microsoft.VisualStudio.TemplateWizard.IWizard接口,核心逻辑在RunStarted方法里:

using Microsoft.VisualStudio.TemplateWizard;
using System.Windows.Forms;
using System.Collections.Generic;

namespace MyWizard
{
    public class MyCustomWizard : IWizard
    {
        public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
        {
            // 弹出自定义表单收集参数
            using (var paramForm = new CustomParamForm())
            {
                if (paramForm.ShowDialog() == DialogResult.OK)
                {
                    // 将收集到的参数加入替换字典,模板文件中可通过$CustomParam$引用
                    replacementsDictionary.Add("$CustomParam$", paramForm.InputValue);
                }
                else
                {
                    // 用户取消操作,抛出异常终止模板创建
                    throw new WizardCancelledException("用户取消参数配置");
                }
            }
        }

        // 实现其他IWizard接口方法,默认返回true即可
        public bool ShouldAddProjectItem(string filePath) => true;
        public void BeforeOpeningFile(EnvDTE.ProjectItem projectItem) { }
        public void ProjectFinishedGenerating(EnvDTE.Project project) { }
        public void ProjectItemFinishedGenerating(EnvDTE.ProjectItem projectItem) { }
        public void RunFinished() { }
    }
}

四、模板打包与安装

  • 将模板源文件、.vstemplate、MyWizard.dll及依赖文件放在同一文件夹下,确保没有嵌套子目录。
  • 把整个文件夹打包成ZIP文件(ZIP根目录直接包含所有文件,不是包含文件夹)。
  • 将ZIP文件复制到VS的项模板目录:%USERPROFILE%\Documents\Visual Studio 20XX\Templates\ItemTemplates,重启Visual Studio后即可正常使用。

内容的提问来源于stack exchange,提问作者Dean Henderson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:52:28