我正在关注制作discord bot的教程,在遵循设置机器人的基础知识后,我一直遇到这个例外:
已抛出System.Reflection.TargetInvocationException。调用的目标抛出了异常。
这是我的代码:
using Discord.Commands;
using Discord;
using System;
namespace TestBot
{
public class MyBot
{
DiscordClient discord;
public MyBot()
{
discord = new DiscordClient(x =>
{
x.LogLevel = LogSeverity.Info;
x.LogHandler = Log;
});
discord.UsingCommands(x =>
{
x.PrefixChar = '!';
x.AllowMentionPrefix = true;
});
var commands = discord.GetService<CommandService>();
commands.CreateCommand("test")
.Do(async (e) =>
{
await e.Channel.SendMessage("response");
});
discord.ExecuteAndWait(async () =>
{
await discord.Connect("BOT_TOKEN", TokenType.Bot);
});
}
private void Log(object sender, LogMessageEventArgs e)
{
Console.WriteLine(e.Message);
}
}
}
MonoDevelop表示这段代码正在发生异常:
discord.ExecuteAndWait(async () =>
{
await discord.Connect("BOT_TOKEN", TokenType.Bot);
});
我不知道如何解决这个问题,所以非常感谢任何帮助。
(由于这是我在这里发表的第一篇文章,所有关于如何改进我的帖子的建议也表示赞赏。)
答案 0 :(得分:2)
您的异常的真正原因是对您隐藏。要解决此问题,您需要查看内部异常(如果需要,还需要查看该异常的内部异常等等)。这将允许您查看问题的根本原因,并允许您锻炼如何解决它。
当您的代码在调试模式下中断时,您可以查看内部异常;
点击查看详细信息可以查看有关例外的更多信息;
一旦找到了您的例外的真正原因,我建议您发布一个新问题,询问如何解决该特定问题(如果您无法自行解决)。
答案 1 :(得分:0)
在我的情况下,它是由一些内部代码中的一些异常引起的,并且异常是通过堆栈引发的,当到达表面并显示异常窗口时,异常消息已被丢失,因此它显示无用的消息System.Reflection.TargetInvocationException has been thrown.
解决方案是,打开异常设置窗口,并检查所有项目,以便在发生任何类型的异常时它会中断,因此您可以抓住最常见的异常,该错误原因可以被理解为未被理解
我的想法来自HERE。