Прочитать на английском

Поделиться через


Предупреждение .NET для Android XA4214

Примеры сообщений

warning XA4214: The managed type `Library1.Class1` exists in multiple assemblies: Library1, Library2. Please refactor the managed type names in these assemblies so that they are not identical.
warning XA4214: References to the type `Library1.Class1` will refer to `Library1.Class1, Library1`.

Проблема

Если два или более типов C# из разных сборок наследуются от Java.Lang.Object одного и того же полного имени, то это имя всегда будет ссылаться только на один из типов при использовании в файлах ресурсов Android.

Решение

Типичным способом устранения этого предупреждения является переименование типов, чтобы каждое полное имя существовало только в одной сборке.

Другой вариант — добавить [Register] атрибуты в конфликтующие управляемые типы, чтобы каждый из них имеет уникальное имя типа Java.

Третий вариант — указать имена типов с именем сборки в файлах ресурсов Android. Например, используйте полное имя Library1.Class1, Library сборки, а не просто Library1.Class1. Это работает только в тех местах, где xml-схема разрешает имя типа в атрибуте XML. Одним из примеров class является атрибут элементов fragment .

Если вы решили использовать [Register] атрибуты или имена с указанием сборки, а не переименовать управляемые типы, можно скрыть предупреждения либо путем добавления /warnasmessage:XA4214 переключателя в командную строку MSBuild, либо путем добавления XA4214 $(MSBuildWarningsAsMessages) в свойство в CSPROJ-файле:

<PropertyGroup>
    <MSBuildWarningsAsMessages>XA4214</MSBuildWarningsAsMessages>
</PropertyGroup>