UWP - .NET Native 工具链编译错误

UWP - .NET Native tool chain compilation error

我开发了一个简单的小型通用 Windows 应用程序,它使用 EF7 和 SQLite。当 "Compile with .NET Native tool chain" 选项 unchecked.

时编译运行流畅

如果我检查选项 "Compile with .NET Native tool chain",我得到以下编译错误:

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. Most likely you'll need a newer version of EF... although I know they've had some other issues with our ahead of time compilation strategy (see: https://github.com/aspnet/EntityFramework/issues/3603)。我们将继续与他们合作以解决问题,并希望 EF 在 3 月的某个时候更新 2 时能够处于一个很好的位置。

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

如果您实际上不需要这种类型(并且您需要的所有其他东西也不需要这种类型等等),则可能从您的应用程序中删除该指令将允许 tree shaker 从中消除这种类型在出现问题之前您的应用程序:

    <Assembly Name="*Application*" Dynamic="Required All" />

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

让我知道是否可行或者您有任何其他问题。我们总是乐于在 dotnetnative@microsoft.com.

获得反馈并提供一些支持