Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用c发送microsoft botframework sdk v4中本地文件夹中的图像#_C#_Image_Botframework - Fatal编程技术网

C# 如何使用c发送microsoft botframework sdk v4中本地文件夹中的图像#

C# 如何使用c发送microsoft botframework sdk v4中本地文件夹中的图像#,c#,image,botframework,C#,Image,Botframework,我使用Microsoft Botframework C#SDK V4创建了一个机器人,它运行良好。现在我想给机器人添加一些图像。我正在使用卡片,但卡片只获取图像的url。我想发送本地文件夹中的图像。我怎样才能让它工作 我已经在15.0 github repo()上尝试过了。当我在处理附件github repo时使用了精确的代码,我得到了以下内联附件的异常stacktrace Sorry, it looks like something went wrong.’ at Microsoft.Bot.

我使用Microsoft Botframework C#SDK V4创建了一个机器人,它运行良好。现在我想给机器人添加一些图像。我正在使用卡片,但卡片只获取图像的url。我想发送本地文件夹中的图像。我怎样才能让它工作

我已经在15.0 github repo()上尝试过了。当我在处理附件github repo时使用了精确的代码,我得到了以下内联附件的异常stacktrace

Sorry, it looks like something went wrong.’ at Microsoft.Bot.Connector.Conversations.d__10.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.Bot.Connector.ConversationsExtensions.d__17.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.Bot.Builder.BotFrameworkAdapter.d__15.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.Bot.Builder.TurnContext.<>c__DisplayClass22_0. 
<g__SendActivitiesThroughAdapter|1>d.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.Bot.Builder.TurnContext.d__21.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.BotBuilderSamples.AttachmentsBot.d__0.MoveNext() in 
C:\botbuilder-samples\samples\csharp_dotnetcore\15.handling-attachments\AttachmentsBot.cs:line 65
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.Bot.Builder.MiddlewareSet.d__3.MoveNext()
 — End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.Bot.Builder.BotAdapter.d__13.MoveNext()’
抱歉,看起来好像出了问题。'at Microsoft.Bot.Connector.Conversations.d_u10.MoveNext()
-来自引发异常的上一个位置的堆栈结束跟踪-
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()中
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在Microsoft.Bot.Connector.ConversationsExtensions.d_u17.MoveNext()中
-来自引发异常的上一个位置的堆栈结束跟踪-
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()中
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在Microsoft.Bot.Builder.BotFrameworkAdapter.d_u15.MoveNext()中
-来自引发异常的上一个位置的堆栈结束跟踪-
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()中
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在Microsoft.Bot.Builder.TurnContext.c\u DisplayClass22\u 0上。
d、 MoveNext()
-来自引发异常的上一个位置的堆栈结束跟踪-
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()中
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在Microsoft.Bot.Builder.TurnContext.d_u21.MoveNext()上
-来自引发异常的上一个位置的堆栈结束跟踪-
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()中
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在Microsoft.BotBuilderSamples.AttachmentsBot.d_u0.MoveNext()中
C:\botbuilder samples\samples\csharp\u dotnetcore\15.处理附件\AttachmentsBot.cs:第65行
-来自引发异常的上一个位置的堆栈结束跟踪-
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()中
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在Microsoft.Bot.Builder.MiddlewareSet.d_u3.MoveNext()上
-来自引发异常的上一个位置的堆栈结束跟踪-
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()中
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在Microsoft.Bot.Builder.BotAdapter.d_u13.MoveNext()中
如何解决此问题???

此示例演示如何读取本地文件,并将其附加为base64编码图像:

reply.Attachments = new List<Attachment>() { GetInlineAttachment() };

private static Attachment GetInlineAttachment()
{
    var imagePath = Path.Combine(Environment.CurrentDirectory, @"Resources\architecture-resize.png");
    var imageData = Convert.ToBase64String(File.ReadAllBytes(imagePath));

    return new Attachment
    {
        Name = @"Resources\architecture-resize.png",
        ContentType = "image/png",
        ContentUrl = $"data:image/png;base64,{imageData}",
    };
}

当我尝试使用第一个代码段时,它会向我显示“抱歉,它看起来出了问题”,即使我在我的项目资源文件夹中添加了该图像。您能否建议我如何使用c#在sdk v4中获取异常堆栈跟踪以及默认错误消息。请确保已将本地文件设置为“复制到输出目录”。您可以通过添加OnTurnError来获取异常堆栈跟踪。您还可以在本地进行调试:感谢您的响应,现在我正在获取堆栈跟踪以及默认错误消息。当我在将本地文件设置为“复制到输出目录”后尝试使用第一个代码段时,它仍然不起作用。当我尝试使用“http url”时,它可以工作,但当我尝试使用本地路径时,它不会显示图像。我还需要改变什么吗。
private async Task SendFile(ITurnContext turnContext)
{
    var webRoot = _env.ContentRootPath;
    var imagePath = System.IO.Path.Combine(webRoot, "Resources", "BotFrameworkDiagram.png");
    var connector = turnContext.TurnState.GetValueOrDefault("Microsoft.Bot.Connector.IConnectorClient") as ConnectorClient;

    var attachments = new Attachments(connector);
    var response = await attachments.Client.Conversations.UploadAttachmentAsync(
        turnContext.Activity.Conversation.Id,
        new AttachmentData
        {
            Name = "BotFrameworkDiagram.png",
            OriginalBase64 = File.ReadAllBytes(imagePath),
            Type = "image/png"
        });

    var attachmentUri = attachments.GetAttachmentUri(response.Id);

    var attachment = new Attachment
    {
        Name = "BotFrameworkDiagram.png",
        ContentType = "image/png",
        ContentUrl = attachmentUri
    };

    var reply = turnContext.Activity.CreateReply();
    reply.Attachments.Add(attachment);
    await turnContext.SendActivityAsync(reply);   
}