gpt4 book ai didi

c# - 添加新包会破坏 .NET 5 应用程序

转载 作者:行者123 更新时间:2023-12-05 09:34:02 25 4
gpt4 key购买 nike

我一直在努力弄清楚为什么我的控制台应用程序在我引入新包的那一刻就失败了。使用 IdentityModel.OidcClientMicrosoft.AspNetCore.Server.Kestrel 有效,但在添加 Microsoft.Extensions.Configuration.Json 时它抛出异常。我也没有在代码中引用新包,我只是将它添加到项目中。

重现步骤:

  1. 克隆 https://github.com/IdentityModel/IdentityModel.OidcClient.Samples.git

  2. NetCoreConsoleClient 升级到 .NET 5(更新包)。

  3. 删除 Serilog.Sinks.Literate 过时的包。

  4. 删除对 .WriteTo.LiterateConsole 的调用对于 Program.cs 中的 SeriLog 并添加 using IdentityModel.Client .

  5. 添加CancellationToken cancellationToken = new CancellationToken() InvokeAsync 的参数SystemBrowser 中的方法类(class)。 IBrowser 的签名界面已更改,新方法应如下所示:public async Task<BrowserResult> InvokeAsync(BrowserOptions options, CancellationToken cancellationToken = new CancellationToken())

  6. 运行应用程序并使用 alice/alice 登录。获取token成功。

  7. 添加包 Microsoft.Extensions.Configuration.Json .

  8. 运行应用程序。它现在抛出异常 Object reference not set to an instance of an object写入 http 响应时。

异常发生在LoopbackHttpListener.SetResult写回复时:ctx.Response.WriteAsync("<h1>You can now return to the application.</h1>");

为什么添加包会对运行时产生如此大的影响?

项目文件:

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<AssemblyName>NetCoreConsoleClient</AssemblyName>
<OutputType>Exe</OutputType>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="5.0.0" />
<PackageReference Include="Serilog.Extensions.Logging" Version="3.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.2.0" />
<PackageReference Include="IdentityModel.OidcClient" Version="3.1.2" />
</ItemGroup>

</Project>

完全异常:

System.NullReferenceException
HResult=0x80004003
Message=Object reference not set to an instance of an object.
Source=Microsoft.AspNetCore.Server.Kestrel.Core
StackTrace:
at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.CreateResponseHeader(Boolean appCompleted)
at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProduceStart(Boolean appCompleted)
at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.InitializeResponseAsync(Int32 firstWriteByteCount)
at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.WriteAsync(ReadOnlyMemory`1 data, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpResponseStream.WriteAsync(Byte[] buffer, Int32 offset, Int32 count, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.HttpResponseWritingExtensions.WriteAsync(HttpResponse response, String text, Encoding encoding, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.HttpResponseWritingExtensions.WriteAsync(HttpResponse response, String text, CancellationToken cancellationToken)
at ConsoleClientWithBrowser.LoopbackHttpListener.SetResult(String value, HttpContext ctx) in C:\Users\stefa\Source\Repos\IdentityModel.OidcClient.Samples\NetCoreConsoleClient\src\NetCoreConsoleClient\SystemBrowser.cs:line 172

解决方案

去掉Microsoft.AspNetCore.Server.KestrelMicrosoft.Extensions.Configuration.Json ,将SDK改为Microsoft.NET.Sdk.Web一切正常。感谢@JHBonarius 为我指明了正确的方向。

最佳答案

我遇到了完全相同的问题。

 ctx.Response.StatusCode = 200;
ctx.Response.ContentType = "text/html";
ctx.Response.Headers.Add("Date", DateTimeOffset.UtcNow.ToString());
await ctx.Response.WriteAsync(content);
await ctx.Response.Body.FlushAsync();

设置日期标题解决了我 4,因为那是 Kestrel.Core 中的失败

关于c# - 添加新包会破坏 .NET 5 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66829853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com