适用于 Android 的 .NET 警告 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 添加到您的 .csproj 文件中的 $(MSBuildWarningsAsMessages) 属性,从而隐藏警告。

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