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

4
我开发了一个简单且小的通用Windows应用程序,它使用EF7和SQLite。当选项"使用.NET本机工具链进行编译"未被勾选时,它可以编译并顺利运行。
但是,如果我勾选了"使用.NET本机工具链进行编译"选项,则会出现以下编译错误:
“错误:类型'System.MarshalByRefObject'未包含在编译中,但在类型'Microsoft.Data.Entity.Design.OperationExecutor'中已被引用。可能缺少某个程序集。”
此后出现了许多其他错误,但我认为解决这个错误也将解决其余问题。
有人知道如何解决吗?

只需将类型添加到Default.rd.xml文件中,然后再次尝试即可。 - Hans Passant
我该怎么做?在哪里做? - Daniel
加油,我正在学习.NET和C#。没有人天生就知道一切。既然你知道如何做,告诉我应该不是问题。我已经在谷歌上搜索过了,发现这个文件在我的项目属性文件夹中。问题是我不知道如何添加“System.MarshalByRefObject”引用。 - Daniel
这里也有完全相同的问题。 - AymenDaoudi
1个回答

6
我猜你使用的库没有针对UWP可用的.NET表面区域进行目标设置。UWP的表面区域是称为.NET Core的API集,您可以在此处查看源代码:http://www.github.com/dotnet/corefx。最有可能需要EF的更新版本...尽管我知道他们在我们的预编译策略方面也存在一些其他问题(请参见:https://github.com/aspnet/EntityFramework/issues/3603)。我们继续与他们合作解决问题,并希望到三月份更新2时,EF能够处于一个很好的位置。
之所以只在.NET Native中看到这种情况,是因为编译器在编译时遍历整个应用程序,以生成它认为您将调用的所有内容的本机代码。它恰好注意到此类型不可用并正确地报错。我猜想您实际上在应用程序中不会调用此代码路径,因为CoreCLR也会产生类似的错误...只是发生在运行时而不是编译时。
如果您实际上不需要此类型(以及您需要的其他所有内容也不需要此类型等等),则从应用程序中删除此指令可能会使树状摇动器在事情出错之前消除此类型。
    <Assembly Name="*Application*" Dynamic="Required All" />

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

如果这样做起作用或您有任何其他问题,请告诉我。我们非常乐意听取反馈并在dotnetnative@microsoft.com提供支持。


我已经删除了<Assembly Name="*Application*" Dynamic="Required All" />,并且在勾选了“使用.NET Native工具链编译”选项后,应用程序正常编译(等待时间很长)。现在的问题是,当我运行“appcertui.exe”时,应用程序在测试中间卡住了。我想我会创建一个没有EF和SQlite的辅助项目(也许将数据保存在ini文件中),直到EF有一个更稳定的版本。 - Daniel
1
如果AppCertUI失敗是一致的,我很樂意將其轉交給微軟的相關人員處理。您可以使用上面的電子郵件直接聯繫我。 - MattWhilden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接