c# - 尽管已经执行了依赖于 Func`2 的代码,但 WinCE 上的 Func`2<> 出现 MissingMethodException

标签 c# compact-framework func .net-cf-3.5 missingmethodexception

我正在编写在 WindowsCE 6.0 上的 .NETCF 3.5 上运行的 C# 代码,该代码在运行时抛出 Func`2<> 的 MissingMethodExceptions。发生异常的代码部分是随机的。

奇怪的是,当您已经使用该应用程序一段时间并且肯定已经发生了许多对 Func`2 的调用时,就会发生这种情况。 (例如,通过 IEnumerable.Select() 或 .Where()) 如果您在应用程序的生命周期内加载足够的类型,使得程序集文件大小的总和超过约 18MB,则似乎会开始此行为。但设备上有足够的内存 (RAM) 来加载类型。

也激活了LoaderLogging,但没有效果。它只向我显示 Func`2 的 TypeLoad 错误。

当我没有想法时: 造成此类错误的原因是什么?

不幸的是,我无法共享任何代码,因为它是 1) 我工作的公司的属性(property),2) 数万行代码。

最佳答案

.NETCF 似乎有限制:

每个泛型类型声明只能构造 1024 个唯一的封闭类型。(有关详细信息,请参阅“限制”部分: http://blogs.msdn.com/b/romanbat/archive/2005/01/06/348114.aspx )

含义:

List<int> a;
List<int> b;
List<int> c;

占用一个“槽”,

List<int> d;
List<string> e;

占用两个“槽位”(两个独特的结尾),依此类推。

棘手的事情是:通常这会引发 ArgumentException,但有时 .NETCF 会抛出 MissingMethodExceptions。 (参见“3.抛出异常的差异。”:http://blogs.msdn.com/b/nazimms/archive/2005/01/25/360324.aspx)

我们通过尽可能使用我们自己的委托(delegate)类型来减少 Func`2 的使用,这解决了问题。

关于c# - 尽管已经执行了依赖于 Func`2 的代码,但 WinCE 上的 Func`2<> 出现 MissingMethodException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13147994/

相关文章:

.net-3.5 - Async/await for Compact Framework v3.5 - 手动实现

c# - Func 委托(delegate)的更好(通用)声明

c# - Linq 2 XML : How to retrieve web methods' names from a wsdl document?

c# - 如何从onedriveclient sdk c#获取用户名或电子邮件

c# - 无法使用 C# 将时间转换为 ISO 8601

javascript - 在 WebBrowser 控件中从 .NET Compact Framework 调用 JavaScript 函数

.net紧凑框架 "Target framework"

c# - Func<T, TResult> 委托(delegate)现实世界使用

Swift:在初始化器中传递一个 func 作为参数

c# - 在 Windows Phone 8 中控制后退键