Owin.Security.Providers - 派生的 OpenIDAuthenticationMiddlewareBase class 声明了 FieldNotFoundException
Owin.Security.Providers - OpenIDAuthenticationMiddlewareBase derived class claims a FieldNotFoundException
使用 Nuget 包 Owin.Security.Providers.OpenIDBase 2.1.1
和 Owin.Security.Provides.OpenID 2.24.0
- DLL 版本 2.0.0.0
。
我正在派生自己的提供程序 - 即 MyOwnAuthenticationMiddleware : OpenIDAuthenticationMiddlewareBase<MyOwnAuthenticationOptions>
,并将其作为标准 Startup 的一部分传递给 IAppBuilder.Use()
。
这在我自己的机器上编译和运行良好 - classic 开发者系列。
但是当基于 Microsoft Visual Studio Online 的构建服务器(2017 年托管)构建时,它会构建但在启动时抛出运行时错误:
MissingFieldException: Field not found:
'Owin.Security.Providers.OpenIDBase.OpenIDAuthenticationMiddlewareBase`1.HTTPClient'.]
xxxx.CreateSpecificHandler()
字段 HTTPClient
(a System.Net.Http.HttpClient
) 显然无法在派生泛型 class 中找到 - 它是 OpenIDAuthenticationMiddlewareBase
的成员,它没有改变在人们的记忆中。
我认为构建服务器必须链接到不同的 OpenIDAuthenticationMiddlewareBase
,但错误消息中的完整规范名称表明并非如此。
由于正在进行的 .NET Framework/.NET Standard DLL 地狱,我收到了相当多的警告 - 一个与 System.Net.Http
的不同版本有关,我也将其作为 Nuget 包。这可能相关吗?
一个不相关的说明 - 是否有人觉得 Nuget 依赖项和令人眼花缭乱的 .NET 数组的组合 Framework/Standard/Core 版本控制刚刚重新创建了 .NET 应该在第一个中缓解的相同 DLL 地狱地点?
问题出在 System.Net.Http 和 .NETStandard。
如果您有一个 solution/project 目标 .NET Framework 4.6/4.7 涉及引用 .NETStandard2,您可能会遇到麻烦。请参阅 Github 上的问题 here and here。关键字:.NET Standard、.NET Framework、ASP.NET、System.Net.Http、MissingMethodException、FieldNotFoundException。
症状:运行时异常 - 例如 FieldNotFoundException
,其中有问题的字段可能是 HttpClient,例如来自 System.Net.Http
包的东西。或者(在我的情况下,在 BotFramework 的情况下)- 请求 api/messages
,尝试与机器人交谈的用户失败并显示 MissingMethodException
。您只能在服务器日志或 ApplicationInsights 中看到。从用户的角度来看,它默默地失败了。
共识似乎是在这些情况下需要明确引用 System.Net.Http
。最简单的方法是将绑定重定向添加到您的 web.config - 例如,对于 Nuget System.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>
,错误地认为让系统处理绑定重定向是最好的 - 请参阅文章here。但是,我错过了它(清楚地)说自动生成的绑定重定向在 Web 应用程序项目中不起作用的地方!
使用 Nuget 包 Owin.Security.Providers.OpenIDBase 2.1.1
和 Owin.Security.Provides.OpenID 2.24.0
- DLL 版本 2.0.0.0
。
我正在派生自己的提供程序 - 即 MyOwnAuthenticationMiddleware : OpenIDAuthenticationMiddlewareBase<MyOwnAuthenticationOptions>
,并将其作为标准 Startup 的一部分传递给 IAppBuilder.Use()
。
这在我自己的机器上编译和运行良好 - classic 开发者系列。
但是当基于 Microsoft Visual Studio Online 的构建服务器(2017 年托管)构建时,它会构建但在启动时抛出运行时错误:
MissingFieldException: Field not found:
'Owin.Security.Providers.OpenIDBase.OpenIDAuthenticationMiddlewareBase`1.HTTPClient'.]
xxxx.CreateSpecificHandler()
字段 HTTPClient
(a System.Net.Http.HttpClient
) 显然无法在派生泛型 class 中找到 - 它是 OpenIDAuthenticationMiddlewareBase
的成员,它没有改变在人们的记忆中。
我认为构建服务器必须链接到不同的 OpenIDAuthenticationMiddlewareBase
,但错误消息中的完整规范名称表明并非如此。
由于正在进行的 .NET Framework/.NET Standard DLL 地狱,我收到了相当多的警告 - 一个与 System.Net.Http
的不同版本有关,我也将其作为 Nuget 包。这可能相关吗?
一个不相关的说明 - 是否有人觉得 Nuget 依赖项和令人眼花缭乱的 .NET 数组的组合 Framework/Standard/Core 版本控制刚刚重新创建了 .NET 应该在第一个中缓解的相同 DLL 地狱地点?
问题出在 System.Net.Http 和 .NETStandard。
如果您有一个 solution/project 目标 .NET Framework 4.6/4.7 涉及引用 .NETStandard2,您可能会遇到麻烦。请参阅 Github 上的问题 here and here。关键字:.NET Standard、.NET Framework、ASP.NET、System.Net.Http、MissingMethodException、FieldNotFoundException。
症状:运行时异常 - 例如 FieldNotFoundException
,其中有问题的字段可能是 HttpClient,例如来自 System.Net.Http
包的东西。或者(在我的情况下,在 BotFramework 的情况下)- 请求 api/messages
,尝试与机器人交谈的用户失败并显示 MissingMethodException
。您只能在服务器日志或 ApplicationInsights 中看到。从用户的角度来看,它默默地失败了。
共识似乎是在这些情况下需要明确引用 System.Net.Http
。最简单的方法是将绑定重定向添加到您的 web.config - 例如,对于 Nuget System.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>
,错误地认为让系统处理绑定重定向是最好的 - 请参阅文章here。但是,我错过了它(清楚地)说自动生成的绑定重定向在 Web 应用程序项目中不起作用的地方!