Xamarin.Android warning XA4214
Example messages
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`.
Issue
If two or more C# types from different assemblies inherit from
Java.Lang.Object
and share the same fully qualified name, that name will
always refer to just one of the types when used in Android resource files.
Solution
The typical way to resolve this warning is to rename the types so that each fully qualified name only exists in one assembly.
Another option is to add [Register]
attributes on the conflicting managed
types so that each one has a unique Java type name.
A third option is to qualify the type names with the assembly name in the
Android resource files. For example, use the assembly-qualified name
Library1.Class1, Library
rather than just Library1.Class1
. This only works
in places where the XML schema allows a type name within an XML attribute. One
example is the class
attribute on fragment
elements.
If you choose to use [Register]
attributes or assembly-qualified names rather
than renaming the managed types, then you can hide the warnings either by adding
the /warnasmessage:XA4214
switch to the MSBuild command line or by adding
XA4214
to the $(MSBuildWarningsAsMessages)
property in your .csproj file:
<PropertyGroup>
<MSBuildWarningsAsMessages>XA4214</MSBuildWarningsAsMessages>
</PropertyGroup>