对象引用未设置为 Teams 频道中对象的实例

Object reference not set to an instance of an object in Teams Channel

提问人:Neerajyadav Kumar 提问时间:6/27/2022 最后编辑:Lance U. MatthewsNeerajyadav Kumar 更新时间:6/28/2022 访问量:373

问:

它在 Bot 框架模拟器中完美运行,但在这一点上在 Teams 中显示错误

if(Dialog != null)
{
  await Dialog.RunAsync( turnContext, ConversationState.CreateProperty<DialogState>("DialogState"), cancellationToken);
  //Logger.LogInformation("Running dialog with Message Activity.");
}  

代码如下:

protected override async Task OnMessageActivityAsync(
  ITurnContext<IMessageActivity> turnContext, 
  CancellationToken cancellationToken)
{
  // Run the Dialog with the new message Activity.
  if (Dialog == null)
    throw new ArgumentNullException("Dialog is null");
  if (ConversationState == null)
    throw new ArgumentNullException("ConversationState is null");
  if (cancellationToken == null)
    throw new ArgumentNullException("cancellationToken is null");

  if (turnContext == null)
    throw new ArgumentNullException("turnContext is null");
  if(Dialog != null)
  {
    //error
    await Dialog.RunAsync( 
      turnContext, 
      ConversationState.CreateProperty<DialogState>("DialogState"), 
      cancellationToken);
    //Logger.LogInformation("Running dialog with Message Activity.");
  }         
}
C# .NET BotFramework NullReferenceException 自适应卡

评论

0赞 Community 6/27/2022
请提供足够的代码,以便其他人可以更好地理解或重现问题。
0赞 Lance U. Matthews 6/28/2022
这回答了你的问题吗?什么是 NullReferenceException,如何修复它?
0赞 Lance U. Matthews 6/28/2022
顺便说一句,构造函数中的 lone/first 参数指定参数名称;该异常的语义已经传达了某些内容“为 null”,唯一缺少的信息是哪个参数。因此,您可以将其重写为 or,以便在参数重命名后保持一致。 并且不是参数,因此 ing an 或 just an 会更合适。stringArgumentNullExceptionthrow new ArgumentNullException("turnContext");throw new ArgumentNullException(nameof(turnContext));DialogConversationStatethrowInvalidOperationExceptionException

答:

0赞 AP01 6/28/2022 #1

此异常意味着某些内容为 null。该调用中似乎至少有一个变量(假设您的第一个代码块是发生异常的位置)为 null。可以尝试使用 ngrok 进行本地调试,以通过本地调试器运行机器人,但通过 Teams 与其交互。

可以单步执行并观看机器人执行从 Teams 发送的命令。跟踪执行直到发生异常,并检查哪个变量为 null。知道哪个变量为 null 后,就可以修复错误。

(顺便说一句,为对话框提供更具描述性的名称可能会有所帮助,而不仅仅是Dialog)

评论

1赞 Lance U. Matthews 6/28/2022
如果无法给出比“某物为空”更具体的答案(而且由于问题中缺乏信息,我不相信可以),那么这就是标记为关于该问题的规范问题的重复项的地方,因为这些答案涵盖了所有这些问题。