Я создаю свой пользовательский элемент управления для редактирования тега.Я использую Visual Studio 2019
и Xamarin Forms
.Он работает для UWP
и iOS
, но в Android
у меня ошибка с собственным рендерером.
Система.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.
Полный исходный код моего компонента находится на 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 .