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 异常的主要内容,如果未能解决你的问题,请参考以下文章