Visual Studio for Mac 上的奇怪 linq 异常

Posted

技术标签:

【中文标题】Visual Studio for Mac 上的奇怪 linq 异常【英文标题】:Strange linq exception on Visual Studio for Mac 【发布时间】:2019-11-08 20:22:15 【问题描述】:

我有一个非常古老的项目,它是用 Xamarin(现在的 Visual Studio for Mac)编写的。

该项目使用 mysql 数据库和实体框架。

当我尝试做一个非常基本的查询时

using (myentities db = myentities())

    customer.where(c => ... any filter ...)

我得到了这个例外:

System.MethodAccessException
Method `System.Data.DataView.get_RowPredicate()' is inaccessible from method `System.Data.LinqDataView.get_RowFilter()'

请注意 - 我也不例外,桌子是空的。 - 两年前在同一台计算机上完美运行!

有什么想法吗?

谢谢

【问题讨论】:

这是构建错误还是运行时错误? 不,这是运行时错误。我收到了一个 500 http 错误与此异常 有没有升级.net平台或者mixin不兼容的包? 我已经升级了所有东西:包和 .net 框架版本(最新) Mono 最近升级了,只考虑了移动/Blazor 应用程序,因此如果您在 Mono 上处理 ASP.NET 4.x 项目,则可以预料到这种情况。 ASP.NET 4.x 项目应该转到 Visual Studio for Windows。或者将它们迁移到 ASP.NET Core。 【参考方案1】:

LinqDataView 正在使用DataView(通过继承和使用RowPredicate of DataView

看起来LinqDataViewDataView 是不兼容的版本,因此 LinqDataView 调用的 DataView 在编译时具有 RowPredicate,但您使用的 DLL 中的 DataView 没有(可访问)行谓词

LinqDataView 在 System.Data.DataSetExtensions dll 中,DataView 在 System.Data dll 中。

因此 System.Data.DataSetExtensions dll 和 System.Data dll 之间存在不兼容性。

仔细检查这些 dll/包是否已正确更新/安装。 (也许还清除 obj/bin 文件夹并检查 .configs 的版本)

【讨论】:

以上是关于Visual Studio for Mac 上的奇怪 linq 异常的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio for Mac 2017预览版 初体验

Visual Studio 2017 for Mac 体验之Android.Form

Visual Studio的奇淫技巧,你知道多少?

Visual Studio for mac从入门到放弃1

Visual Studio 2022 for Mac v17.0 发布,离线安装包下载

Visual Studio for Mac 2017 初体验