Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Имена пакетов Java часто не соответствуют соглашениям о пространстве имен C# из-за таких проблем, как дополнительные префиксы и различия в прописи.
Например, имя пакета Java com.microsoft.streamwriters будет автоматически преобразовано в Com.Microsoft.Streamwriters, так как процесс привязки автоматически преобразует пространства имен в стиль Pascal. Тем не менее лучше будет Microsoft.StreamWriters.
Это можно сделать, добавив <AndroidNamespaceReplacement> элемент в файл проекта:
<ItemGroup>
<AndroidNamespaceReplacement Include='com.microsoft.streamwriters' Replacement='Microsoft.StreamWriters' />
</ItemGroup>
Хотя пакеты Java также можно переименовать с помощью традиционных metadata, это может быть утомительно для переименования многих аналогичных пакетов:
<attr path="/api/package[@name='com.microsoft.accessibility']" name="managedName">Microsoft.Accessibility</attr>
<attr path="/api/package[@name='com.microsoft.content']" name="managedName">Microsoft.Content</attr>
<attr path="/api/package[@name='com.microsoft.core']" name="managedName">Microsoft.Core</attr>
...
С помощью <AndroidNamespaceReplacement> то же преобразование MSBuild, помещенное в файл проекта, может быть применено ко всем подходящим пакетам.
<ItemGroup>
<AndroidNamespaceReplacement Include='com.microsoft' Replacement='Microsoft' />
</ItemGroup>
Спецификация
Эти замены будут выполняться только для <package> элементов, которые не указывают metadata@managedName атрибут.
Если @managedName используется, вы решили указать точное требуемое имя, оно не будет обработано дальше.
В отличие от неиспользуемых метаданных, эти замены не вызывают предупреждения, если они не используются.
Учет регистра
Замены выполняются после автоматического преобразования регистра Pascal, но сравнение не учитывает регистр.
Таким образом, оба из следующих вариантов эквивалентны:
<AndroidNamespaceReplacement Include='Androidx' Replacement='AndroidX' />
<AndroidNamespaceReplacement Include='androidx' Replacement='AndroidX' />
Границы слов
Замены происходят только для полных слов (части пространства имен).
Таким образом,
<AndroidNamespaceReplacement Include='Com' Replacement='' />
Совпадает с Com.Google.Library, но не с Common.Google.Library или Google.Imaging.Dicom.
Можно использовать несколько полных слов:
<AndroidNamespaceReplacement Include='Com.Google' Replacement='Google' />
<AndroidNamespaceReplacement Include='Com.Androidx' Replacement='Microsoft.AndroidX' />
Позиция Word
Совпадение с частью слова может быть ограничено началом или концом пространства имен путем добавления . или предустановки .соответственно.
<AndroidNamespaceReplacement Include='Androidx.' Replacement='Microsoft.AndroidX' />
совпадает с Androidx.Core, но не с Square.OkHttp.Androidx.
Аналогично,
<AndroidNamespaceReplacement Include='.Compose' Replacement='ComposeUI' />
соответствует Google.AndroidX.Compose, но не Google.Compose.Writer.
Как добавление в начало, так и добавление в конец элемента . делает его точным соответствием.
<AndroidNamespaceReplacement Include='.Androidx.' Replacement='Microsoft.AndroidX' />
совпадает Androidx, но не Google.Androidx.Core.
Порядок замены
Замены выполняются в порядке, указанном <ItemGroup>, однако добавление в эту группу в разное время может привести к непреднамеренному порядку.
Замены выполняются последовательно, а несколько замен могут повлиять на одно пространство имен.
<AndroidNamespaceReplacement Include='Androidx' Replacement='Microsoft.AndroidX' />
<AndroidNamespaceReplacement Include='View' Replacement='Views' />
Переход Androidx.View на Microsoft.AndroidX.Views.
Отношение к метаданным
Форма метаданных, если требуется.
То есть элемент MSBuild:
<ItemGroup>
<AndroidNamespaceReplacement Include='com.microsoft' Replacement='Microsoft' />
</ItemGroup>
вместо этого можно поместить в metadata.xml в следующем виде:
<metadata>
<ns-replace source='com.microsoft' replacement='Microsoft' />
</metadata>