Я использую свой iMac, чтобы немного быстрее работать над своим приложением .NET8 MAUI
и подготовить его для всех платформ. Проект отлично работает на моем ноутбуке с Windows 11. Теперь я хочу использовать MacOS, потому что, к сожалению, работать с Visual Studio для Mac проще и быстрее.
Чтобы протестировать iOS, MacCatalyst и Android, я работаю на своем iMac и Visual Studio для Mac (хотя поддержка больше не осуществляется). Я создал новый эмулятор для Android.
и затем запустил эмулятор.
Приложение работает на моем компьютере с Windows для Windows и Android и на моем iMac для MacCatalyst и iOS. К сожалению, когда я запускаю приложение на эмуляторе Android на своем iMac, я получаю эту ошибку:
System.Reflection.TargetInvocationException: Исключение было выброшено целью вызова. —> Microsoft.Maui.Controls.Xaml.XamlParseException: Не найдён встроенный ресурс для PSC.Maui.Components.LanguageDropdown.LanguageDropdown
в Microsoft.Maui.Controls.Xaml.CreateValuesVisitor.Visit(ElementNode node, INode parentNode) в //src/Controls/src/Xaml/CreateValuesVisitor.cs:106
в Microsoft.Maui.Controls.Xaml.ElementNode.Accept(IXamlNodeVisitor visitor, INode parentNode) в //src/Controls/src/Xaml/XamlNode.cs:189
в Microsoft.Maui.Controls.Xaml.ElementNode.Accept(IXamlNodeVisitor visitor, INode parentNode) в //src/Controls/src/Xaml/XamlNode.cs:185
в Microsoft.Maui.Controls.Xaml.ElementNode.Accept(IXamlNodeVisitor visitor, INode parentNode) в //src/Controls/src/Xaml/XamlNode.cs:185
в Microsoft.Maui.Controls.Xaml.RootNode.Accept(IXamlNodeVisitor visitor, INode parentNode) в //src/Controls/src/Xaml/XamlNode.cs:242
в Microsoft.Maui.Controls.Xaml.XamlLoader.Visit(RootNode rootnode, HydrationContext visitorContext, Boolean useDesignProperties) в //src/Controls/src/Xaml/XamlLoader.cs:208
в Microsoft.Maui.Controls.Xaml.XamlLoader.Load(Object view, String xaml, Assembly rootAssembly, Boolean useDesignProperties) в //src/Controls/src/Xaml/XamlLoader.cs:78
в Microsoft.Maui.Controls.Xaml.XamlLoader.Load(Object view, String xaml, Boolean useDesignProperties) в //src/Controls/src/Xaml/XamlLoader.cs:53
в Microsoft.Maui.Controls.Xaml.XamlLoader.Load(Object view, Type callingType) в //src/Controls/src/Xaml/XamlLoader.cs:49
в Microsoft.Maui.Controls.Xaml.Extensions.LoadFromXaml[MainPage](MainPage view, Type callingType) в //src/Controls/src/Xaml/ViewExtensions.cs:37
в LanguageDropdownDemo.MainPage.InitializeComponent() в /Users/enrico/Projects/PSC.Maui.Components.LanguageDropdown/LanguageDropdownDemo/obj/Debug/net8.0-android/Microsoft.Maui.Controls.SourceGen/Microsoft.Maui.Controls.SourceGen.CodeBehindGenerator/MainPage.xaml.sg.cs:26
в LanguageDropdownDemo.MainPage..ctor() в /Users/enrico/Projects/PSC.Maui.Components.LanguageDropdown/LanguageDropdownDemo/MainPage.xaml.cs:9
в at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Constructor(Object obj, IntPtr* args)
в at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
— Конец трассировки внутреннего исключения —
в at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
в at System.RuntimeType.CreateInstanceMono(Boolean nonPublic, Boolean wrapExceptions)
в at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean wrapExceptions)
в at System.Activator.CreateInstance(Type type, Boolean nonPublic, Boolean wrapExceptions)
в at System.Activator.CreateInstance(Type type, Boolean nonPublic)
в at System.Activator.CreateInstance(Type type)
в Microsoft.Maui.Controls.ShellContent.<>c__DisplayClass19_0.<Microsoft.Maui.Controls.IShellContentController.GetOrCreateContent>b__0() в //src/Controls/src/Core/Shell/ShellContent.cs:76
в Microsoft.Maui.Controls.ElementTemplate.CreateContent() в //src/Controls/src/Core/ElementTemplate.cs:86
в Microsoft.Maui.Controls.Internals.DataTemplateExtensions.CreateContent(DataTemplate self, Object item, BindableObject container) в //src/Controls/src/Core/DataTemplateExtensions.cs:23
в Microsoft.Maui.Controls.ShellContent.Microsoft.Maui.Controls.IShellContentController.GetOrCreateContent() в //src/Controls/src/Core/Shell/ShellContent.cs:81
в Microsoft.Maui.Controls.Platform.Compatibility.ShellSectionRenderer.OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) в //src/Controls/src/Core/Compatibility/Handlers/Shell/Android/ShellSectionRenderer.cs:124
в AndroidX.Fragment.App.Fragment.n_OnCreateView_Landroid_view_LayoutInflater_Landroid_view_ViewGroup_Landroid_os_Bundle(IntPtr jnienv, IntPtr native__this, IntPtr native_inflater, IntPtr native_container, IntPtr native_savedInstanceState) в C:\a_work\1\s\generated\androidx.fragment.fragment\obj\Release\net6.0-android\generated\src\AndroidX.Fragment.App.Fragment.cs:2031
в Android.Runtime.JNINativeWrapper.Wrap_JniMarshal_PPLLL_L(_JniMarshal_PPLLL_L callback, IntPtr jnienv, IntPtr klazz, IntPtr p0, IntPtr p1, IntPtr p2) в /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs:363
Некоторые проекты работают на моем компьютере с Windows. Я не понимаю, в чем проблема.
Ответ
Проблема, с которой вы столкнулись, связана с ошибкой при попытке загрузить XAML-ресурс в приложении .NET MAUI для Android на вашем iMac. Ошибка System.Reflection.TargetInvocationException
и Microsoft.Maui.Controls.Xaml.XamlParseException: No embeddedresource found for PSC.Maui.Components.LanguageDropdown.LanguageDropdown
указывает на то, что элемент LanguageDropdown
, вероятно, не был найден или не был правильно встроен в вашу сборку.
Вот несколько шагов, которые помогут вам решить эту проблему:
-
Проверка настройки XAML:
Убедитесь, что файл XAML для компонентаLanguageDropdown
действительно существует в проекте и правильно установлен в свойствах файла. Для этого:- Найдите ваш XAML-файл в проводнике решений.
- Щелкните по нему правой кнопкой мыши и выберите "Свойства".
- Убедитесь, что "Действие сборки" установлено на "Embedded Resource". Это необходимо для того, чтобы XAML-файл можно было встроить в сборку и доступен для загрузки.
-
Обновление пакетов:
Убедитесь, что все пакеты NuGet обновлены до последних версий. Иногда проблемы могут быть вызваны несоответствием версий пакетов. Для этого:- Откройте «Управление NuGet-пакетами» и обновите все установленные пакеты.
- После этого выполните полную пересборку вашего проекта (Clean и затем Rebuild).
-
Проверка целевой платформы:
Убедитесь, что ваш проект правильно настроен для работы на Android и что все зависимости, необходимые для Android, установлены. Для этого:- Откройте свойства проекта и убедитесь, что целевая платформа установлена на Android.
- Проверьте, включены ли в проект все необходимые NuGet-пакеты для Android.
-
Перезапуск эмулятора:
Иногда эмуляторы могут иметь сбои из-за кеширования. Попробуйте перезапустить эмулятор, чтобы устранить возможные проблемы. -
Логи и отладка:
Проверьте логи приложения, чтобы получить дополнительные сведения о проблеме. Запустите приложение в режиме отладки, чтобы отследить, на каком этапе возникает ошибка. Это поможет вам лучше понять источник проблемы. -
Проверка окружения:
Убедитесь, что ваше окружение разработки (Visual Studio для Mac) обновлено до последней версии, даже если оно больше не поддерживается активно. - Протестировать на другом эмуляторе или устройстве:
Если проблема сохраняется, попробуйте запустить приложение на другом эмуляторе (например, Genymotion) или на физическом устройстве, чтобы проверить, воспроизводится ли ошибка только на данном эмуляторе.
Если вы выполните все вышеуказанные шаги и ошибка все еще сохраняется, возможно стоит создать новый простой проект MAUI с минимальным набором компонентов и проверить, воспроизводится ли ошибка в этом проекте. Это поможет вам определить, связана ли проблема с конкретным компонентом или с конфигурацией вашего проекта.
Надеюсь, это поможет вам решить проблему!