代码之家  ›  专栏  ›  技术社区  ›  oflahero

owin.security.providers-OpenIDAuthenticationMiddleWareBase派生类声明FieldNotFoundException

  •  0
  • oflahero  · 技术社区  · 6 年前

    使用Nuget包 Owin.Security.Providers.OpenIDBase 2.1.1 Owin.Security.Provides.OpenID 2.24.0 -DLL版本 2.0.0.0 .

    我正在开发我自己的供应商,即 MyOwnAuthenticationMiddleware : OpenIDAuthenticationMiddlewareBase<MyOwnAuthenticationOptions> 把它传给 IAppBuilder.Use() 作为标准启动的一部分。

    这在我自己的机器上编译并运行良好-经典的开发线。

    但是,当构建在Microsoft Visual Studio Online的构建服务器(托管于2017年)上时,它会生成,但在启动时会引发运行时错误:

    MissingFieldException: Field not found:
        'Owin.Security.Providers.OpenIDBase.OpenIDAuthenticationMiddlewareBase`1.HTTPClient'.]
        xxxx.CreateSpecificHandler()
    

    HTTPClient (a) System.Net.Http.HttpClient )显然在派生的泛型类中找不到-它是 OpenIDAuthenticationMiddlewareBase 在生活记忆中没有改变。

    我在想构建服务器必须链接到另一个 OpenIDAuthenticationMiddleWareBase ,但错误消息中的完整规范名称指示其他情况。

    由于正在进行的.NET Framework/.NET标准dll hell-一个与不同版本的 System.Net.Http 我也有一个裸体套餐。这是否相关?

    有一个不相关的说明——还有人觉得nuget依赖项和令人困惑的.NET框架/标准/核心版本控制数组的组合刚刚重新创建了.NET一开始应该减轻的同一个dll外壳吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   oflahero    6 年前

    问题出在system.net.http和.netstandard上。

    如果您有一个面向.NET Framework 4.6/4.7的解决方案/项目,涉及引用.netstandard2,那么您可能遇到了错误。查看问题 here here 在Github上。关键字:.NET标准,.NET框架,ASP.NET,System.NET.HTTP,MissingMethodException,FieldNotFoundException。

    症状:运行时异常-例如 FieldNotFoundException ,其中所讨论的字段可以是httpclient,例如, System.Net.Http 包裹。或者(在我的例子中,在botframework中)请求 api/messages ,尝试与bot对话的用户失败 MissingMethodException . 您只能在服务器日志或ApplicationInsights中看到。从用户的POV来看,它会无声地失败。

    共识似乎是明确提及 系统.net.http 在这种情况下是必需的。最简单的方法是将绑定重定向添加到web.config,例如,对于nuget 系统.net.http 包版本4.3.3:

      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
      </dependentAssembly>
    

    最初不在那里的原因是我 <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> 在我的.csproj文件中,错误地认为让系统处理绑定重定向是最好的选择——请参阅本文 here . 但是,我忽略了一点,它(很明显)说自动生成的绑定重定向在Web应用程序项目中不起作用!

    推荐文章