У меня есть приложение MAUI (.NET 7), ссылающееся на пользовательскую библиотеку классов (.dll) с инфраструктурой EF Core (.NET 6), которая прекрасно компилируется и развертывается в режиме отладки на всех платформах. К сожалению, когда я пытаюсь скомпилировать и упаковать его, я получаю следующую ошибку:
/usr/local/share/dotnet/packs/Microsoft.MacCatalyst.Sdk/16.2.1040/targets/Xamarin.Shared.Sdk.targets(1011,3): ошибка: не удалось скомпилировать AOT MyLibrary.dll, компилятор AOT завершил работу с кодом 1 1 ошибка(и)
или аналогичный на Android или MacCatalyst.
Есть ли какой-либо вариант, который мне не хватает, чтобы деактивировать компиляцию AOT? Могу ли я деактивировать его, так как мне также нужно упаковать его для устройств iOS? Или я должен что-то изменить в самом проекте библиотеки, чтобы он подходил для компиляции AOT?
Существует проблема с ошибкой компиляции при публикации для iOS. У него такое же сообщение об ошибке, как и у вас.
И вы можете попробовать обходной путь в комментарии, используя следующий код в csproj.file.
<PropertyGroup Condition = "'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net6.0-ios|AnyCPU'">
<MtouchUseLlvm>False</MtouchUseLlvm>
<AotAssemblies>True</AotAssemblies>
</PropertyGroup>
Кроме того, если вы можете поделиться своим проектом на github, вы также можете опубликовать новую проблему и опубликовать свой проект в качестве образца.
Обновление 1:
Добавьте следующий код в свой csproj:
<PropertyGroup>
<UseInterpreter>true</UseInterpreter>
</PropertyGroup>
Вы пытались отключить Аот с помощью <AotAssemblies>False</AotAssemblies>
? @ImproveSoftware
А ты поменял 'Release|net6.0-ios|AnyCPU'
на 'Release|net7.0-ios|AnyCPU'
? Я вижу, вы сказали, что ваш проект .net 7.0. @ImproveSoftware
Да, конечно, я переключился на «Release|net7.0-ios|AnyCPU» и попытался отключить AOT, используя предложенную вами разметку, но безуспешно. Я также попытался с предложенной (в качестве предупреждения) другой разметкой отключить компиляцию AOT, которая называется «RunAOTCompilation», которая должна заменить «AotAssemblies», но я получаю еще больше ошибок. Проблема по-прежнему заключается в том, что сборка, на которую ссылаются, не может скомпилироваться AOT (это мирная .NET 6 с библиотекой классов контекста EF Core).
Возможно, вы можете попробовать установить целевую структуру вашего проекта как .net 6.0. Поскольку библиотека контекстных классов EF Core — это .net 6.0. @ImproveSoftware
Я попробую как можно скорее и дам вам знать. Кстати, должна ли библиотека классов .NET 6 быть несовместимой с проектом .NET 7 (особенно если задействованные пакеты nuget поддерживают используемые рабочие нагрузки)? Я ошибаюсь?
Ладно, ждем ваших отзывов. @ImproveSoftware
Я пробовал все, что вы предложили, безуспешно. Включал и отключал несколько опций как в исходном проекте, так и в новом шаблонном. Я даже пробовал с совершенно новой конфигурацией. Несмотря на то, что иногда он собирается в режиме выпуска, он не может быть опубликован независимо от того, работаю ли я с помощью CLI или IDE. И ошибка у меня всегда одна и та же (та что в теме). Я всерьез подумываю о том, чтобы вообще отказаться от этой библиотеки. Просто чтобы дать вам больше информации, я использую Vs для Mac Silicon. Не знаю, что еще делать :/
После еще трех часов, потраченных на то, чтобы понять это, я пришел к следующему: он будет скомпилирован и запущен в конфигурации выпуска, если я установлю компоновщик конкретной платформы на «Связать все». Это позволит мне правильно опубликовать приложение. Однако, когда я тестировал опубликованную версию на веб-сервисе, я заметил, что модели (или вообще объекты), содержащиеся в упомянутой внешней библиотеке классов, построены неправильно. Это, конечно, вызывает ряд проблем. Может ли это странное поведение быть как-то связано с настройками компоновщика? Я очень в отчаянии :(
Какую версию xcode вы использовали? И вы опубликовали проект с Visual Studio для Mac или для Windows? @ImproveSoftware
XCode 14.3 (последняя версия), но это произошло и с XCode 14.2. Нет, у меня есть только Vs для Mac, так как у меня нет машины с Windows.
Вы пытались опубликовать проект шаблона без пользовательской библиотеки классов (.dll)? @ImproveSoftware
Да и работает исправно.
Так что причина в пользовательской библиотеке. Вы можете попробовать добавить <PropertyGroup> <UseInterpreter>true</UseInterpreter> </PropertyGroup>
в csproj.flie по этому выпуску на гитхабе. @ImproveSoftware
Оставив настраиваемые свойства конфигурации Release (связать только сборки SDK), но установив для интерпретатора значение TRUE, удалось добиться цели! Скомпилированный исполняемый файл (для MacCatalyst) легче и работает правильно. Компилятор AOT больше не дает сбоев (хотя я его не отключал). Я даже смог опубликовать для iOS. Спасибо за вашу хорошую помощь, я на самом деле не знаю, почему я должен был пройти через это! :)
Вы имели в виду, что код <PropertyGroup><UseInterpreter>true</UseInterpreter> </PropertyGroup>
решил эту проблему? @ImproveSoftware
Я подтверждаю, что добавление <PropertyGroup><UseInterpreter>true</UseInterpreter> </PropertyGroup>
решило проблему компиляции AOT на iOS и MacCatalyst.
Хорошо, рад узнать, что вы решили проблему. Удачного кодирования!
Спасибо за предложение. Я попытался использовать новый шаблон проекта MAUI, но применить его, к сожалению, не получилось. Чтобы усложнить ситуацию, я использую Vs для Mac, и раздел «Конфигурации» в свойствах проекта не так удобен для пользователя: / не знаю, что еще делать, если не открывать вопрос на GitHub, как вы сказали…