我开发了一个使用 EF7 和 SQLite 的简单小型通用 Windows 应用程序。 It compiles and runs smoothly when the option "Compile with .NET Native tool chain" is unchecked.
如果我选中选项 “使用 .NET Native 工具链编译”,我会收到以下编译错误:
Error Type 'System.MarshalByRefObject' was not included in compilation, but was referenced in type 'Microsoft.Data.Entity.Design.OperationExecutor'. There may have been a missing assembly.
在此之后还有很多其他错误,但我相信解决这个问题也会解决其余问题。
有人知道怎么解决吗?
最佳答案
我假设发生的情况是您使用的库未针对 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 中看到这一点的原因是编译器在编译时遍历您的整个应用程序,以便为它认为您将要调用的所有内容生成 native 代码。它恰好注意到此类型不可用并正确错误。我假设您实际上并没有在您的应用程序中调用此代码路径,因为它会在 CoreCLR 上产生类似的错误...它只会在运行时而不是编译时发生。
如果您实际上不需要这种类型(并且您需要的所有其他东西也不需要这种类型等等),那么从您的应用程序中删除该指令可能会允许 tree shaker 从您的应用程序中消除这种类型在事情出错之前:
<Assembly Name="*Application*" Dynamic="Required All" />
此指令会导致您的应用程序中的所有类型和您引用的非框架库都被 Root ,因此无法摆脱。默认情况下使用此指令使我们的分析更容易,并且使大多数人不必对我们的分析引擎了解太多。删除它可能会帮助您避免此问题。
让我知道这是否有效,或者如果您有任何其他问题。我们总是乐于通过 dotnetnative@microsoft.com 获得反馈并提供一些支持。
关于c# - UWP - .NET Native 工具链编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34748389/