Owin.Security.Providers-OpenIDAuthenticationMiddlewareBase派生



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

我正在派生我自己的提供者,即MyOwnAuthenticationMiddleware : OpenIDAuthenticationMiddlewareBase<MyOwnAuthenticationOptions>,并将其作为标准启动的一部分传递给IAppBuilder.Use()

这在我自己的机器上编译和运行得很好——这是经典的开发人员行。

但当在Microsoft Visual Studio Online的构建服务器(Hosted 2017(上构建时,它会进行构建,但在启动时会抛出运行时错误:

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

字段HTTPClient(一个System.Net.Http.HttpClient(显然在派生的泛型类中找不到——它是OpenIDAuthenticationMiddlewareBase的成员,在生活记忆中没有改变。

我认为构建服务器必须链接到不同的OpenIDAuthenticationMiddlewareBase,但错误消息中的完整规范名称表明情况并非如此。

由于正在进行的.NET Framework/.NET标准DLL地狱,我收到了一些警告,其中一个警告与System.Net.Http的不同版本有关,我也将其作为Nuget包。这是否相关?

另一方面,有没有人觉得Nuget依赖项和令人困惑的.NET Framework/Standard/Core版本控制的组合刚刚重新创建了.NET最初应该缓解的DLL地狱?

问题与System.Net.Http和.NETStandard.有关

如果您有一个针对.NET Framework 4.6/4.7的解决方案/项目,其中涉及到引用.NETStandard2,那么您可能会遇到麻烦。在Github上查看此处和此处的问题。关键词:.NET Standard,.NET Framework,ASP.NET,System.NET.Http,MissingMethodException,FieldNotFoundException。

症状:运行时异常,如FieldNotFoundException,其中有问题的字段可能是HttpClient,例如System.Net.Http包中的某个字段。或者(在我的情况下,在BotFramework的情况下(-对api/messages的请求,试图与机器人对话的用户会以MissingMethodException失败。您只能在服务器日志或ApplicationInsights中看到。从用户的POV来看,它会无声地失败。

共识似乎是,在这种情况下需要明确提及System.Net.Http。最简单的方法是将绑定重定向添加到web.config中,例如,对于NugetSystem.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>

最初没有出现这种情况的原因是,我在.csproj文件中有<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>,错误地认为让系统处理绑定重定向是最好的——请参阅本文。然而,我错过了它(清楚地(说自动生成的绑定重定向在web应用程序项目中不起作用的地方!

相关内容

  • 没有找到相关文章

最新更新