C# 项目向导完成之前已创建项目

C# 项目向导完成之前已创建项目,c#,visual-studio,project,wizard,project-template,C#,Visual Studio,Project,Wizard,Project Template,我为我的模板创建了一个项目向导。使用此向导,用户可以填写应用程序名称等内容,然后创建应用程序。问题是向导已启动,但随后会立即创建项目,而不是在完成向导后创建。这意味着没有进行替换 我有这个表格(大大简化): 使用向导: public class Wizard : IWizard { private readonly Form _form = new Form(); public void RunStarted(object automationObject, Diction

我为我的模板创建了一个项目向导。使用此向导,用户可以填写应用程序名称等内容,然后创建应用程序。问题是向导已启动,但随后会立即创建项目,而不是在完成向导后创建。这意味着没有进行替换

我有这个表格(大大简化):


使用向导:

public class Wizard : IWizard
{
    private readonly Form _form = new Form();

    public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
    {
        try
        {
            _form.Show();

            string name = _form.Name.Text;

            if (!string.IsNullOrEmpty(name)) replacementsDictionary.Add("$appname$", name);
        }
        catch (Exception e)
        {
        }
    }

    public bool ShouldAddProjectItem(string filePath)
    {
        return true;
    }

    public void RunFinished()
    {
    }

    public void BeforeOpeningFile(ProjectItem projectItem)
    {
    }

    public void ProjectItemFinishedGenerating(ProjectItem projectItem)
    {
    }

    public void ProjectFinishedGenerating(Project project)
    {
    }
}
公共类向导:IWizard
{
私有只读表单_Form=新表单();
public void RunStarted(对象自动对象、字典替换Dictionary、向导runKind runKind、对象[]customParams)
{
尝试
{
_form.Show();
字符串名称=_form.name.Text;
if(!string.IsNullOrEmpty(name))replacementsDictionary.Add(“$appname$”,name);
}
捕获(例外e)
{
}
}
公共bool ShouldAddProjectItem(字符串文件路径)
{
返回true;
}
public void RunFinished()
{
}
打开文件之前的公共无效(ProjectItem ProjectItem)
{
}
公共无效项目完成生成(项目项目)
{
}
公共无效项目完成生成(项目)
{
}
}
我用以下代码将其绑定到我的模板:

<WizardExtension>
  <Assembly>PartyTemplateWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=6c4fd97fa2ac3b4f</Assembly>
  <FullClassName>PartyTemplateWizard.Wizard</FullClassName>
</WizardExtension>


是否有人知道向导成功完成之前创建项目的原因(尽管由于“确定”按钮上还没有事件处理程序,因此无法创建项目)?

尝试使用
\u form.ShowDialog()将阻止主线程。目前看来,
RunStarted
方法执行时没有阻塞,因此不使用自定义表单。

尝试使用
\u form.ShowDialog()将阻止主线程。目前看来,
RunStarted
方法执行时没有阻塞,因此不使用自定义表单。

太棒了!这完美地解决了问题:)我的替代品现在很好用。太棒了!这完美地解决了问题:)我的替代品现在可以正常工作了。
<WizardExtension>
  <Assembly>PartyTemplateWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=6c4fd97fa2ac3b4f</Assembly>
  <FullClassName>PartyTemplateWizard.Wizard</FullClassName>
</WizardExtension>