【发布时间】: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