Xamarin iOS链接器问题



我有一个应用程序,它有一个带有共享代码的android和ios项目。android应用程序运行良好,并使用SDK Only链接器。我还有一个Linker文件来强制链接器不删除使用过的函数——这是一个相当大的文件,我还尝试添加了一堆保留属性。然而,在iOS项目中也出现了同样的情况,做同样的事情是行不通的。它从EF中删除一些内容并抛出这个异常:

"The type initializer for 'Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions' threw an exception. ---> System.InvalidOperationException"

整个代码库在没有链接的情况下工作得非常好。我添加了一堆mtouch参数来尝试跳过它,但这也不起作用。

--linkskip=Microsoft.EntityFrameworkCore 
--linkskip=Microsoft.EntityFrameworkCore.Design 
--linkskip=Microsoft.EntityFrameworkCore.Sqlite 
--linkskip=Microsoft.EntityFrameworkCore.Tools 
--linkskip=Interactive.Async 
--linkskip=Remotion.Linq 
--linkskip=System.Data 
--linkskip=System.Collections.Immutable 
--linkskip=System.Diagnostics.DiagnosticSource 
--linkskip=Microsoft.Extensions.Logging 
--linkskip=System.Interactive.Async 
--linkskip=Microsoft.EntityFrameworkCore.Abstractions 
--linkskip=Microsoft.Extensions.DependencyInjection 
--linkskip=Microsoft.Extensions.Caching.Memory 
--linkskip=System.ComponentModel.Annotations

我即将在NuGet存储库中添加每个DLL,这将使Linker变得无用。这是iOS链接器的错误还是我在这里缺少了什么?我已经阅读了文档https://learn.microsoft.com/en-us/xamarin/ios/deploy-test/linker?tabs=windows在互联网上到处找都找不到。感谢您的帮助。

谢谢,

如果您在iOS项目上使用"仅链接SDK程序集"选项,那么所有这些--linkskip参数都不会起任何作用,因为只有SDK程序集被链接。因此,EntityFrameworkCore可能正在使用Xamarin.iosSDK程序集中正在链接的东西。System.Linq是SDK的一部分,它为许多数据库类型添加了扩展方法。

因此,我认为您可能遇到了这个问题:https://github.com/xamarin/xamarin-macios/issues/3394

如果是,请尝试放置:

[assembly: Preserve (typeof (System.Linq.Queryable), AllMembers = true)]

在命名空间之外的iOS项目的Main.cs文件中,例如:

using UIKit;
[assembly: Preserve (typeof (System.Linq.Queryable), AllMembers = true)]
namespace
{
...
}

相关内容

  • 没有找到相关文章

最新更新