Xamarin iOS Linker Issue - PullRequest
       2

Xamarin iOS Linker Issue

0 голосов
/ 28 ноября 2018

У меня есть приложение, в котором есть проект android и ios с общим кодом.Приложение для Android прекрасно работает и использует компоновщик SDK Only.У меня также есть файл компоновщика, который заставляет компоновщик не удалять используемые функции - это довольно большой файл, и я также попытался добавить несколько атрибутов сохранения.Та же ситуация в проекте 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

Я собираюсь добавить каждую DLL в репозиторий NuGet, что сделает Linker бесполезным.Это ошибка для iOS Linker или чего мне здесь не хватает?Я прочитал документацию [https://docs.microsoft.com/en-us/xamarin/ios/deploy-test/linker?tabs=windows] и искал всюду в интернете, и ничего не приходит.Любая помощь приветствуется.

Спасибо,

1 Ответ

0 голосов
/ 29 ноября 2018

Если вы используете опцию «Link SDK Сборки только» в проекте iOS, то все эти аргументы --linkskip ничего не будут делать, так как связаны только сборки SDK.Так что EntityFrameworkCore может использовать что-то связанное, что находится в сборках Xamarin.iOS SDK.System.Linq является частью SDK и добавляет методы расширения для многих типов баз данных.

Так что я думаю, что вы можете решить эту проблему: https://github.com/xamarin/xamarin-macios/issues/3394

Если это так, попробуйте поставить:

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

в файле Main.cs проекта iOS вне пространства имен, например:

using UIKit;

[assembly: Preserve (typeof (System.Linq.Queryable), AllMembers = true)]
namespace
{
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...