C# botframework v4:ReplaceDialogAsync id为';X';不是';找不到

C# botframework v4:ReplaceDialogAsync id为';X';不是';找不到,c#,.net,botframework,C#,.net,Botframework,我有一个使用固定瀑布流和单个对话框的工作bot,但是我希望扩展bot,使其具有多个不同的对话框,这些对话框将根据用户的输入进行切换。我使用的对话框已经过单独测试,并且彼此独立工作。第一个工作对话框允许用户在4个选项之间进行选择,然后根据选择的选项打开不同的对话框 在当前正在工作的对话框中,我正试图使用以下行切换到另一个对话框 return await stepContext.ReplaceDialogAsync("QnaMakerQueryDialog"); ReplaceDialogAsyn

我有一个使用固定瀑布流和单个对话框的工作bot,但是我希望扩展bot,使其具有多个不同的对话框,这些对话框将根据用户的输入进行切换。我使用的对话框已经过单独测试,并且彼此独立工作。第一个工作对话框允许用户在4个选项之间进行选择,然后根据选择的选项打开不同的对话框

在当前正在工作的对话框中,我正试图使用以下行切换到另一个对话框

return await stepContext.ReplaceDialogAsync("QnaMakerQueryDialog");

ReplaceDialogAsync状态的文档“结束活动对话框并在其位置启动一个新对话框。这对于创建循环或重定向到另一个对话框特别有用。”这听起来与我试图执行的操作完全相同,但我遇到错误“找不到id为“QnaMakerQueryDialog”的对话框。”我希望该对话框从QnaMakerQueryDialog的开头开始,但它只是抛出上述错误并在当前对话框中继续。

我将有根据地猜测,您上面显示的对
ReplaceDialogAsync
的调用是在
ComponentDialog
中进行的。是这样吗

如果是,则属于
ComponentDialogs
的子对话框不能调用该
ComponentDialog
之外的对话框。这是当前版本(目前为4.2)中的一个限制,目前正在考虑一个解决方案来解除此限制


如果这听起来与您的场景相匹配,请向上投票,让您的声音听到这是您希望在将来的版本中看到解决的问题。

谢谢,我没有意识到这一限制。不想尝试一种变通方法/新方法。我可以给你一种,但它很有用:把你想调用的对话框所在的
对话框集
交给你的
组件对话框的构造函数
和你现在调用的
ReplaceDialogAsync
,相反,在该对话框集上调用
CreateContextAsync
,然后使用生成的
DialogContext
实例并通过该实例调用
ReplaceDialogAsync