我开发了一个使用EF7和SQLite的简单通用Windows应用程序。当选项“使用.NET Native工具链编译” 未选中时,它会编译并顺利运行。
如果我检查选项 “使用.NET Native工具链编译”,我会收到以下编译错误:
错误类型'System.MarshalByRefObject'未包含在编译中,但在“Microsoft.Data.Entity.Design.OperationExecutor”类型中引用。可能有一个组装缺失。
在此之后还有很多其他错误,但我相信解决这个错误也会照顾其他错误。
有谁知道如何解决这个问题?
答案 0 :(得分:4)
我认为发生的事情是您使用的库不是针对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上产生类似的错误......它只会在运行时而不是编译时发生。
如果你真的不需要这种类型(你需要的其他所有东西也不需要这种类型等),那么从你的应用程序中删除这个指令就可能了振动器在出现问题之前从您的应用程序中消除此类型:
<Assembly Name="*Application*" Dynamic="Required All" />
该指令导致应用程序中的所有类型和您引用的非框架库都被植根,从而无法摆脱它们。默认情况下使用此指令可以使我们的分析更容易,并使大多数人不必了解我们的分析引擎。删除此功能可能有助于您避免此问题。
如果有问题或者您有任何其他问题,请告诉我。我们一直希望得到反馈并在dotnetnative@microsoft.com上提供一些支持。