Устранение ошибки сборки выпуска в приложении .NET MAUI для Android
Я создаю приложение .NET MAUI, используя .NET версии 7.0.306 (x64) и Visual Studio 2022 версии 17.6.5. Я считаю, что это последние версии. Сейчас я сосредоточен на Android.
Проблема: В режиме отладки приложение работает безупречно. Однако проблема возникает, когда я пытаюсь собрать приложение для выпуска и запустить его на своем реальном физическом тестовом устройстве (Samsung). В конце процесса компиляции Visual Studio я получаю следующее сообщение об ошибке:
Severity Code Description Project File Line Suppression State
Warning MSB3073: The command ""C:\Program Files (x86)\Android\android-sdk\platform-tools\adb" -s RFCN30KRB2M uninstall -k "com.company.appname"" exited with code 1.
Visual Studio каким-то образом удается установить приложение, но оно находится в нерабочем состоянии. Я вручную удалил приложение с устройства перед его созданием.
Что я пробовал: Я искал ответы в Интернете и нашел старую тему, которая, похоже, соответствует описанию моей проблемы. Однако это для приложения Maui Blazor. МауиВыпуск
Я попробовал то, что упоминается в качестве исправления, но это не решило проблему.
Что действительно работает, так это предложения из этого вопроса о переполнении стека :
<PropertyGroup Condition="'$(TargetFramework)' == 'net7.0-android'">
<RunAOTCompilation>false</RunAOTCompilation>
<AndroidLinkMode>None</AndroidLinkMode>
</PropertyGroup>
Однако я слышал, что эти настройки не следует отключать для режима выпуска, поскольку пакет может стать довольно большим. Я также слышал, что AOT (компиляция заранее) очень важна для iOS.
Мой вопрос: Кто-нибудь знает, что вызывает эту проблему, и была ли она исправлена? Какую версию .NET мне следует использовать, если она уже решена?
Изменить: я только что создал новый проект MAUI с нуля, чтобы посмотреть, будет ли нетронутый проект создаваться в режиме выпуска с самого начала. Я все еще получаю ту же ошибку. Я что-то пропустил? Готов ли MAUI к производству?
MauiApp1, кажется, работает, но опять же, в нем не так уж много логики. Я пытался создать собственное приложение с отключенным компоновщиком и AOT, но основная функциональность, использующая Azure Cognitive Service, не будет работать должным образом. Я тоже не могу отладить, потому что отладчик не подключается в режиме выпуска. Так и должно быть?
Редактировать 2: я только что обновился до Visual Studio 2022 версии 17.7 (вышел 8 августа, исправление во вторник). Я попробую и посмотрю, решит ли это мои проблемы. Это не работает.
Редактировать 3: я установил предварительную версию .NET 8.0.100 и предварительную версию Visual Studio 17.8.0 1, но и там мне не повезло. Я больше не знаю, что попробовать. Мне следовало попытаться создать проект в режиме выпуска, прежде чем тратить недели на разработку своего приложения. Есть ли у кого-нибудь еще такая проблема, и если да, то как вы ее решили?
Стиль кнопки:
<Style TargetType="Button" x:Key="ButtonStyle">
<Setter Property="FontFamily" Value="OpenSansRegular"/>
<Setter Property="FontSize" Value="16"/>
<Setter Property="Padding" Value="10,10"/>
<Setter Property="Margin" Value="5" />
<Setter Property="MinimumHeightRequest" Value="65"/>
<Setter Property="MinimumWidthRequest" Value="65"/>
<Setter Property="BackgroundColor" Value="{StaticResource Primary}" />
<Setter Property="TextColor" Value="{StaticResource Black}" />
<Setter Property="CornerRadius" Value="10"/>
<Setter Property="Shadow">
<Setter.Value>
<Shadow Brush="{StaticResource TertiaryBrush}" Offset="10,10" Radius="40" Opacity="0.80"/>
</Setter.Value>
</Setter>
<Setter Property="VisualStateManager.VisualStateGroups">
<VisualStateGroupList>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="Disabled">
<VisualState.Setters>
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray950}, Dark={StaticResource Gray200}}" />
<Setter Property="BackgroundColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray600}}" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateGroupList>
</Setter>
</Style>
2 ответа
Я могу воспроизвести вашу проблему в своем проекте. И я обнаружил, что TextColor изменится, а BackgroundColor — нет, когда я тестирую его в режиме выпуска.
Поэтому я использую свойство Background вместо свойства BackgroundColor , и это сработало. Такой как:
<Style TargetType="Button" x:Key="ButtonStyle">
<Setter Property="FontFamily" Value="OpenSansRegular"/>
<Setter Property="FontSize" Value="16"/>
<Setter Property="Padding" Value="10,10"/>
<Setter Property="Margin" Value="5" />
<Setter Property="MinimumHeightRequest" Value="65"/>
<Setter Property="MinimumWidthRequest" Value="65"/>
<Setter Property="Background" Value="{StaticResource Primary}" />
<Setter Property="TextColor" Value="{StaticResource Black}" />
<Setter Property="CornerRadius" Value="10"/>
<Setter Property="Shadow">
<Setter.Value>
<Shadow Brush="{StaticResource TertiaryBrush}" Offset="10,10" Radius="40" Opacity="0.80"/>
</Setter.Value>
</Setter>
<Setter Property="VisualStateManager.VisualStateGroups">
<VisualStateGroupList>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="Disabled">
<VisualState.Setters>
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray950}, Dark={StaticResource Gray200}}" />
<Setter Property="Background" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray600}}" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateGroupList>
</Setter>
</Style>
Для получения дополнительной информации вы можете обратиться к известной проблеме, связанной с тем, что iOS и Android в режиме выпуска не меняют цвет фона кнопки при изменении состояний .
Первоначально упомянутая проблема заключалась в сбое сборки в конфигурации выпуска, и у меня была такая же проблема.
Когда я переключил конфигурацию сборки на выпуск и проверил ход сборки в окне «Вывод/сборка», последнее сообщение было
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Как было предложено в первом редактировании, я отключил AOT, и сборка выпуска прошла успешно.
Мое приложение ориентировано на Net6.