Dan*_*iel 3 .net c# .net-native windows-10 uwp
我已经开发了使用EF7和SQLite的简单小型通用Windows应用程序。它编译和运行平稳的时候可以选择“编译.NET本地工具链”是未经检查。
如果我选中 “使用.NET本机工具链编译”选项,则会收到以下编译错误:
错误类型'System.MarshalByRefObject'未包括在编译中,但在类型'Microsoft.Data.Entity.Design.OperationExecutor'中被引用。可能缺少一个程序集。
在此之后,还有很多其他错误,但是我相信解决该错误也将解决其余问题。
有谁知道如何解决这个问题?
我认为发生的事情是您使用的库没有针对UWP可用的.NET表面积。UWP的外围区域是称为.NET Core的一组API,您可以在此处查看源代码:http : //www.github.com/dotnet/corefx。很可能您将需要较新版本的EF ...尽管我知道他们在我们的提前编译策略上还有其他问题(请参阅:https : //github.com/aspnet/EntityFramework/issues/3603) 。我们将继续与他们合作,以解决问题,并希望EF能够在三月的某个时候通过Update 2达到理想的位置。
之所以只能在.NET Native中看到它,是因为编译器正在编译时遍历整个应用程序,以便为它认为要调用的所有内容生成本机代码。碰巧注意到该类型不可用,并且正确地出错了。我想您实际上并没有在应用程序中调用此代码路径,因为它会在CoreCLR上产生类似的错误……它只会在运行时发生,而不是在编译时发生。
如果您实际上不需要此类型(并且您所需的其他所有内容也不需要此类型等),则有可能从应用程序中删除此指令将使摇树器在事情解决之前从您的应用程序中消除此类型。错了:
<Assembly Name="*Application*" Dynamic="Required All" />
Run Code Online (Sandbox Code Playgroud)
此伪指令导致应用程序中的所有类型以及您引用的非框架库都被植根,因此无法被删除。默认情况下使用此指令可以使我们的分析更加容易,并使大多数人不必对我们的分析引擎有任何了解。删除它可以帮助您避免此问题。
让我知道这是否可行,或者您还有其他问题。我们一直很乐意获取反馈并在dotnetnative@microsoft.com上提供一些支持。