UWP – .NET本机工具链编译错误

我开发了一个简单的小型通用Windows应用程序,它使用EF7和SQLite。 当取消选中 “使用.NET Native工具链编译 ”选项时,它可以编译并顺利运行。

如果我选中 “使用.NET Native工具链编译 ”选项 ,则会出现以下编译错误:

错误类型’System.MarshalByRefObject’未包含在编译中,但在“Microsoft.Data.Entity.Design.OperationExecutor”类型中引用。 可能有一个组装缺失。

在此之后还有很多其他错误,但我相信解决这个错误也会照顾其余的错误。

有谁知道如何解决这个问题?

我认为发生的事情是你正在使用一个不针对UWP可用的.NET表面区域的库。 UWP的表面区域是一组名为.NET Core的API,您可以在此处查看源代码: http : //www.github.com/dotnet/corefx 。 很可能你需要一个更新版本的EF …虽然我知道他们在我们的提前编译策略中遇到了一些其他问题(参见: https : //github.com/aspnet/EntityFramework/issues/3603 ) 。 我们将继续与他们合作,以便将其整理出来,并希望EF将在3月份的某个时间更新2。

您只能在.NET Native中看到这一点的原因是编译器在编译时遍历整个应用程序,以便为它认为您将要调用的所有内容生成本机代码。 它碰巧注意到这种类型不可用并且错误输出正确。 我假设你实际上没有在你的应用程序中调用这个代码路径,因为它会在CoreCLR上产生类似的错误……它只会在运行时而不是编译时发生。

如果你实际上不需要这种类型(并且你需要的其他所有东西也不需要这种类型等),那么从你的应用程序中删除这个指令可能会让树形振动器在你的应用程序出现之前从你的应用程序中消除这种类型歪:

 

该指令导致应用程序中的所有类型和您引用的非框架库都被植根,因此无法摆脱。 默认情况下使用此指令可以使我们的分析更容易,并使大多数人不必了解我们的分析引擎。 删除它可能有助于避免此问题。

如果有问题,或者您有任何其他问题,请告诉我。 我们一直希望得到反馈并在dotnetnative@microsoft.com上提供一些支持。