【问题标题】:Method not found error in ASP.NET Core app with Json.NET/NEST/Elasticsearch使用 Json.NET/NEST/Elasticsearch 在 ASP.NET Core 应用程序中找不到方法错误
【发布时间】:2018-09-07 02:23:41
【问题描述】:

我在一个解决方案中有两个项目,项目 1 和项目 2。

项目 1. 目标框架是 .NET Core 2.1。这是一个带有控制器和视图的 MVC 项目。它引用了 Project 2。Nuget 包包括:

  • Microsoft.AspNetCore.App
  • Microsoft.NETCore.App

项目 2。 目标框架是 .NET Framework 4.6.1。它是一个使用 NEST/ElasticSearch 获取数据的类库。我时间紧迫,所以我基本上是从运行良好的 .NET Framework 4.5.1 项目中复制这个项目。 Nuget 包包括:

  • NEST 1.7.1

  • ElasticSearch.Net 1.7.1

  • Newtonsoft.Json 7.0.1

  • Microsoft.AspNet.WebApi.Client 5.2.3

项目 2 中的错误:

如果我使用与旧 4.5.1 项目完全相同的代码,我不确定为什么会收到此错误。唯一真正的区别是它现在与 .NET Core 2.1 项目在同一个解决方案中。

我考虑过的事情:

  • 我尝试将旧项目从 .NET Framework 4.5.1 升级到 .NET 框架 4.6.1。它仍然运行良好,所以我认为这与此无关。
  • 我的预感是 ASP.NET Core 项目使用 Newtonsoft.Json 10/11,而 .NET Framework 4.6.1 项目使用 Newtonsoft.Json 7.0.1,这在某种程度上导致了问题。但如果是这种情况,解决办法是什么?将项目 2 升级到 Newtonsoft.Json 10/11 还需要您更新 NEST 和 ElasticSearch.Net,这会引入大量重大更改。理想情况下,我不必过多地接触 Project 2 中的代码。我真的很想让它工作,但将项目 1 保留在 ASP.NET Core 2.1 中,并且在旧的 .NET Framework 中没有 both 项目。

【问题讨论】:

  • 在 Json.NET 7.0.1 中,DefaultContractResolver 有一个带有 bool 参数的参数化构造函数。它被标记为过时但确实存在。但在 2017 年 1 月 28 日的 Commit 1914b91 中,该构造函数已被删除。很明显,出于某种原因,您的 Project 2 期望构造函数仍然存在。
  • @dbc,由于第二个项目使用的是Newtonsoft.Json 7.0.1,我认为这是正常的,不是吗?
  • 但老实说,目前还不清楚你在做什么。您是否尝试将使用不同版本的 Json.NET 的 .Net 核心和 .Net 框架 DLL 组合成一个可执行文件?
  • @EmrahSüngü - 不一定,因为还有一个默认构造函数。因此,要么ElasticContractResolver 使用参数化构造函数,要么调用默认构造函数被优化为调用参数化构造函数(因为默认构造函数实际上调用了参数化构造函数),而 Project 2 是建成。
  • @dbc,谢谢!

标签: c# elasticsearch asp.net-core json.net nest


【解决方案1】:

看来你的预感是正确的!你有DLL HELL的轻微情况

您可以做一些事情,这里是您可以选择的article

我个人喜欢编辑 app.config 文件,所以我会建议这样做。

<dependentAssembly>  
  <assemblyIdentity name="YOUR JSON ASSEMBLY HERE"  
    publicKeyToken="32ab4ba45e0a69a1"  
    culture="en-us" />  
  <bindingRedirect oldVersion="0.0.0.0" newVersion="11.0.0.0" />  
</dependentAssembly>

【讨论】:

  • 所以我只是编辑项目 2 的 app.config 文件?这将允许项目 1 使用 Newtonsoft 10/11 和项目 2 使用 Newtonsoft 7?
  • @Derek 是的,这是正确的!这就是装配绑定的用途。它会告诉您的项目 2 使用版本 7(或您选择的任何内容:))
  • 这似乎不起作用。我仍然遇到同样的错误。
  • @derek,您似乎做错了什么,或者您的项目中有其他设置未共享。程序集绑定正是为了解决同一个dll的不同版本
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 2020-10-25
相关资源
最近更新 更多