Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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# 添加新包会破坏.NET5应用程序_C#_.net 5_Kestrel Http Server_Identitymodel - Fatal编程技术网

C# 添加新包会破坏.NET5应用程序

C# 添加新包会破坏.NET5应用程序,c#,.net-5,kestrel-http-server,identitymodel,C#,.net 5,Kestrel Http Server,Identitymodel,我一直在试图弄清楚为什么我的控制台应用程序在我引入一个新软件包时就失败了。仅使用IdentityModel.OIDClient和Microsoft.AspNetCore.Server.Kestrel有效,但添加Microsoft.Extensions.Configuration.Json时会引发异常。我也没有在代码中引用新包,我只是将它添加到项目中 复制步骤: 克隆 将NetCoreConsoleClient升级到.NET 5(更新包) 删除Serilog.Sinks.Literate过时包

我一直在试图弄清楚为什么我的控制台应用程序在我引入一个新软件包时就失败了。仅使用
IdentityModel.OIDClient
Microsoft.AspNetCore.Server.Kestrel
有效,但添加
Microsoft.Extensions.Configuration.Json
时会引发异常。我也没有在代码中引用新包,我只是将它添加到项目中

复制步骤:

  • 克隆

  • 将NetCoreConsoleClient升级到.NET 5(更新包)

  • 删除Serilog.Sinks.Literate过时包

  • 在Program.cs中删除SeriLog对
    .WriteTo.LiterateConsole
    的调用,并使用IdentityModel.Client添加

  • SystemBrowser
    类中的
    InvokeAsync
    方法添加
    CancellationToken CancellationToken=new CancellationToken()
    参数。
    IBrowser
    接口的签名已更改,新方法应如下所示:
    public async Task InvokeAsync(browservoptions选项,CancellationToken CancellationToken=new CancellationToken())

  • 运行应用程序并使用alice/alice登录。获取令牌成功

  • 添加包
    Microsoft.Extensions.Configuration.Json

  • 运行应用程序。现在,当写入http响应时,它抛出未设置为对象实例的异常
    对象引用

  • 写入响应时,
    LoopbackHttpListener.SetResult
    中出现异常:
    ctx.response.WriteAsync(“现在可以返回应用程序了”)

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

    项目文件:

    <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>
    
    解决方案
    摆脱
    Microsoft.AspNetCore.Server.Kestrel
    Microsoft.Extensions.Configuration.Json
    ,将SDK更改为
    Microsoft.NET.SDK.Web
    ,一切正常。感谢@JHBonarius为我指明了正确的方向。

    异常被抛出

    private void SetResult(string value, HttpContext ctx)
    {
        try
        {
            ctx.Response.StatusCode = 200;
            ctx.Response.ContentType = "text/html";
            // below
            ctx.Response.WriteAsync("<h1>You can now return to the application.</h1>"); <--- here
            // ^^
            ctx.Response.Body.Flush();
    
            _source.TrySetResult(value);
        }
    ...
    
    private void SetResult(字符串值,HttpContext ctx)
    {
    尝试
    {
    ctx.Response.StatusCode=200;
    ctx.Response.ContentType=“text/html”;
    //下面
    
    WriteAsync(“现在可以返回应用程序了。”);请提供有关步骤5的更多详细信息。您似乎在声明一个局部变量,但您说您正在添加一个参数……到底抛出了什么?请注意,只是升级包的主要版本,将core 2.0升级到5.0,并删除包,而不修改代码,也可能是原因。这是unst的主要风险可启用的行为。需要进行更多修改。需要使用IdentityModel.Client;
    添加到Program.cs,并需要删除
    .WriteTo.LiterateConsole(outputTemplate:…
    from Program.cs.@JHBonarius,我添加了一些上下文,我也尝试了这一点,但没有升级存储库,只是启动了一个新项目并复制了相关代码。使用正确的包。请添加引发的异常。代码是从IdentityModel存储库克隆的,我添加了async/await到我的原始代码。我想知道为什么仅仅添加包会对其他程序集产生如此大的影响。我的印象是.NET 5处理了以前在.NET Framework中遇到的DLL地狱。我将更深入地查看bin文件夹中的实际文件。@Vincent不,这已经在.NET Core.和“DLL地狱”中出现了您正在从.NET core 2.0升级到.NET 5.0:这不是一项简单的任务。在如此大的版本升级中,许多事情都会发生变化。事情*可能*会工作,但随时都可能中断。(在我的公司,我们也在尝试将项目升级到.NET 5.0,但这需要数周的工作。)我确信NetStandard对于Net5的兼容性是足够的。我将尝试重写。
    private void SetResult(string value, HttpContext ctx)
    {
        try
        {
            ctx.Response.StatusCode = 200;
            ctx.Response.ContentType = "text/html";
            // below
            ctx.Response.WriteAsync("<h1>You can now return to the application.</h1>"); <--- here
            // ^^
            ctx.Response.Body.Flush();
    
            _source.TrySetResult(value);
        }
    ...