Xamarin Android и пользовательский элемент управления: невозможно активировать экземпляр - PullRequest
0 голосов
/ 24 апреля 2019

Я создаю свой пользовательский элемент управления для редактирования тега.Я использую Visual Studio 2019 и Xamarin Forms.Он работает для UWP и iOS, но в Android у меня ошибка с собственным рендерером.

Error

Система.NotSupportedException: невозможно активировать экземпляр типа Xamarin.Forms.Platform.Android.EntryRenderer из собственного дескриптора 0x7feca76624 (key_handle 0x95e8e41).

Выходные данные:

04-24 10: 10: 11.382 W / InputMethodManager (17644): startInputReason = 4 04-24 10: 10: 11.415 I / HwSecImmHelper (17644): mSecurityInputMethodService имеет значение null 04-24 10: 10: 11.446 W / ResourceType (17644):Нет идентификатора пакета при получении имени для номера ресурса 0x00000000 04-24 10: 10: 11.448 W / View (17644): dispatchProvideAutofillStructure (): не выложен, игнорируя 04-24 10: 10: 11.453 I / AssistStructure (17644): Flatlinedокончательные вспомогательные данные: 2444 байта, содержащие 1 окно, 10 просмотров 04-24 10: 10: 12.379 I / zygote64 (17644): сбор частичного кэша кода, код = 61 КБ, данные = 54 КБ 04-24 10: 10: 12,379 I/ zygote64 (17644): после сбора кеша кода code =61KB, данные = 54KB 04-24 10: 10: 12.379 I / zygote64 (17644): увеличение емкости кэша кода до 256KB 04-24 10: 10: 14.160 W / zygote64 (17644): JNI RegisterNativeMethods: попытка зарегистрировать 0 собственных методовдля md58432a647068b097f9637064b8985a5e0.FrameRenderer 04-24 10: 10: 14,220 Вт / InputMethodManager (17644): startInputReason = 4 04-24 10: 10: 14.259 W / InputMethodManager (17644): 04:24 I: Reason: startInput:zygote64 (17644): компилятор выделил 5 МБ для компиляции void android.view.View. (android.content.Context, android.util.AttributeSet, int, int) 04-24 10: 10: 14.263 W / InputMethodManager (17644): startInputReason= 3 04-24 10: 10: 14.284 I / HwSecImmHelper (17644): mSecurityInputMethodService is null 04-24 10: 10: 14.379 I / zygote64 (17644): Выполнить сбор полного кэша кода, код = 108 КБ, данные = 98 КБ 04-24 10: 10: 14.380 I / zygote64 (17644): после сбора кэша кода, код = 101 КБ, данные = 74 КБ 04-24 10: 10: 14,568 D / Mono
(17644): загрузка ссылки 6 на Mono.Android.dll asmctx ПО УМОЛЧАНИЮ, ищу System.Runtime.Serialization, версия = 2.0.5.0, культура = нейтральная, PublicKeyToken = 7cec85d7bea7798e 04-24 10: 10: 14.570 D / Mono (17644): изображение для добавления System.Runtime.Serialization [0x7e53d21780] (asmctx DEFAULT) -> System.Runtime.Serialization.dll [0x7e51894800]: 2mono_pe_file_map: Ошибка открытия файла System.Runtime.Serialization.dll (3): Нет такого файла или каталога

04-24 10: 10: 14.570 D / Mono (17644): Подготовленонастроить сборку System.Runtime.Serialization (System.Runtime.Serialization.dll) 04-24 10: 10: 14.570 D / Mono (17644): сборка System.Runtime.Serialization [0x7e53d21780] добавлена ​​в домен RootDomain, ref_count= 1 04-24 10: 10: 14.572 D / Mono (17644): AOT: образ 'System.Runtime.Serialization.dll.so' не найден: ошибка dlopen: нет библиотеки "System.Runtime.Serialization.dll.so"найдено 04-24 10: 10: 14.572 D / Mono (17644): AOT: image '/ Users / строитель / jenkins / workspace / xamarin-android-d16-0 / xamarin-android / внешний / mono / sdks / out / android-arm64-V8A-релиз / Библиотека / моно / АОТ-кэш / arm64 / System.Runtime.Serialization.dll.так что 'не найдено: dlopen не удалось: библиотека "/ Users / строитель / jenkins / workspace / xamarin-android-d16-0 / xamarin-android / external / mono / sdks / out / android-arm64-v8a-release / lib / mono/aot-cache/arm64/System.Runtime.Serialization.dll.so "не найден 04-24 10: 10: 14.572 D / Mono (17644): Конфигурация пытается проанализировать: 'System.Runtime.Serialization.dll.config',04-24 10: 10: 14.572 D / Mono (17644): Конфиг пытается разобрать: '/ Users / builder / jenkins / workspace / xamarin-android-d16-0 / xamarin-android / внешний / моно / sdks / out /Android-arm64-V8A-релиз / и т.д. / моно / сборки / System.Runtime.Serialization / System.Runtime.Serialization.config».04-24 10: 10: 14.572 D / Mono (17644): сборка Ref addref Mono.Android [0x7e56659a80] -> System.Runtime.Serialization [0x7e53d21780]: 2 04-24 10: 10: 14.573D / Mono (17644): загрузка 0 из System.Runtime.Serialization.dll asmctx ПО УМОЛЧАНИЮ, ищет mscorlib, Версия = 2.0.5.0, Культура = нейтральная, PublicKeyToken = 7cec85d7bea7798e 04-24 10: 10: 14.573 D / Mono (17644): сборка Ref addref System.Runtime.Serialization [0x7e53d21780] -> mscorlib [0x7e77dc3c80]: 40 Загруженная сборка: System.Runtime.Serialization.dll [Внешняя] Необработанное исключение:

System.NotSupportedException: невозможно активировать экземпляр типа Xamarin.Forms.Platform.Android.EntryRenderer из родного дескриптора 0x7feca76624 (key_handle 0x95e8e41).

Компонент добавляет во время выполнения новый Entry в Layout<View>. Это то, что я ожидаю и в Android.

Result of TagEdit

Полный исходный код моего компонента находится на Github . Важная часть здесь:

public class TagEntryView : Layout<View>, IDisposable
{
    TagEntry TagEntry;

    public TagEntryView()
    {
        PropertyChanged += TagEntryViewPropertyChanged;
        PropertyChanging += TagEntryViewPropertyChanging;

        TagEntry = new TagEntry();
        TagEntry.TextChanged += TagEntryTextChanged;
        Children.Add(TagEntry);
    }

    void TagEntryTextChanged(object sender, TextChangedEventArgs e)
    {
        if (TagSeparators != null)
        {
            if (TagSeparators.Any(e.NewTextValue.Contains))
            {
                string tag = e.NewTextValue;
                foreach (var item in TagSeparators)
                {
                    tag = tag.Replace(item, string.Empty);
                }

                if (TagValidatorFactory != null)
                {
                    var tagBindingContext = TagValidatorFactory(tag);
                    var tagEntry = sender as Entry;

                    if (tagBindingContext != null)
                    {
                        TagItems.Add(tagBindingContext);
                        tagEntry.Text = string.Empty;
                    }
                    else
                    {
                        tagEntry.Text = tag;
                    }

                    tagEntry.Focus();
                }
            }
        }
    }
}

Для получения более подробной информации я создал два видео, где параллельно показываю, что происходит на Visual Studio и устройстве Android.

Вот что я делаю на устройстве Android . Здесь отладка в Visual Studio .

...