0

使用 Nuget 包Owin.Security.Providers.OpenIDBase 2.1.1和-DLLsOwin.Security.Provides.OpenID 2.24.0版本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(a System.Net.Http.HttpClient) 显然无法在派生的泛型类中找到 - 它是 的成员OpenIDAuthenticationMiddlewareBase,在活记忆中没有改变。

我在想构建服务器必须链接到不同的OpenIDAuthenticationMiddlewareBase,但错误消息中的完整规范名称另有说明。

由于正在进行的 .NET Framework/.NET Standard DLL 地狱,我收到了相当多的警告 - 一个与不同版本的 .NET 相关System.Net.Http,我也将其作为 Nuget 包。这可能是相关的吗?

在一个不相关的注释上 - 有没有其他人觉得 Nuget 依赖项和令人眼花缭乱的 .NET Framework/Standard/Core 版本控制数组的组合刚刚重新创建了 .NET 本来应该缓解的同一个 DLL 地狱?

4

1 回答 1

0

问题在于 System.Net.Http 和 .NETStandard。

如果您有一个涉及引用 .NETStandard2 的面向 .NET Framework 4.6/4.7 的解决方案/项目,您可能会遇到麻烦。在 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>

最初不存在的原因是我<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>在我的 .csproj 文件中,错误地认为让系统处理绑定重定向是最好的 - 请参阅此处的文章。但是,我错过了它(清楚地)说自动生成的绑定重定向在 Web 应用程序项目中不起作用的地方!

于 2018-07-18T11:54:05.513 回答