【问题标题】:UWP - .NET Native tool chain compilation errorUWP - .NET Native 工具链编译错误
【发布时间】:2016-04-17 08:19:52
【问题描述】:

我开发了一个使用 EF7 和 SQLite 的简单而小型的通用 Windows 应用程序。当"Compile with .NET Native tool chain"选项unchecked时,它可以顺利编译和运行。

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

错误类型“System.MarshalByRefObject”未包含在编译中,但在类型“Microsoft.Data.Entity.Design.OperationExecutor”中被引用。可能缺少程序集。

在这之后还有很多其他的错误,但我相信解决这个也会解决剩下的问题。

有人知道怎么解决吗?

【问题讨论】:

  • 只需将类型添加到 Default.rd.xml 并重试。
  • 我该怎么做?在哪里做?
  • 来吧,伙计,我从 .NET 和 C# 开始。没有人生来就无所不知。既然你知道这样做很热,我相信告诉我不会有问题。我已经输入了谷歌,发现这个文件在我项目的属性文件夹中。问题是我不知道如何添加“System.MarshalByRefObject”引用。
  • 这里的问题完全相同

标签: c# .net windows-10 uwp .net-native


【解决方案1】:

我推测发生的情况是您使用的库未针对 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 获得反馈并提供一些支持。

【讨论】:

  • 我已经删除了 并且应用程序正常编译(经过很长时间的等待)并带有“使用 .NET Native 工具链编译”选项已选中。现在的问题是,当我运行“appcertui.exe”时,应用程序卡在了测试中间。我想我会创建一个没有 EF 和 SQlite 的辅助项目(可能将数据保存在 ini 文件中),直到 EF 获得更稳定的版本。
  • 如果 AppCertUI 失败是一致的,我很高兴将其路由给 MS 的一个人。您可以使用上面的电子邮件直接与我联系。
猜你喜欢
  • 2019-04-24
  • 1970-01-01
  • 2013-05-07
  • 1970-01-01
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
  • 2018-08-13
  • 2017-07-01
相关资源
最近更新 更多