Partager via


Personnalisation des espaces de noms

Les noms de package Java ne correspondent souvent pas aux conventions d’espace de noms C# en raison de problèmes tels que des préfixes supplémentaires et des différences de mise en majuscules.

Par exemple, le nom com.microsoft.streamwriters du package Java est automatiquement traduit, Com.Microsoft.Streamwriters car le processus de liaison traduit automatiquement les espaces de noms en cas Pascal. Cependant, un meilleur ajustement serait Microsoft.StreamWriters.

Pour ce faire, ajoutez un <AndroidNamespaceReplacement> élément au fichier projet :

<ItemGroup>
  <AndroidNamespaceReplacement Include='com.microsoft.streamwriters' Replacement='Microsoft.StreamWriters' />
</ItemGroup>

Bien que les packages Java puissent également être renommés à l’aide de packages traditionnels metadata, il peut être fastidieux de renommer de nombreux packages similaires :

<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>
...

Avec <AndroidNamespaceReplacement>, la même transformation MSBuild placée dans le fichier projet peut être appliquée à tous les packages correspondants :

<ItemGroup>
  <AndroidNamespaceReplacement Include='com.microsoft' Replacement='Microsoft' />
</ItemGroup>

Spécification

Ces remplacements ne seront exécutés que pour <package> les éléments qui ne spécifient pas d’attribut metadata @managedName.
Si @managedName elle est utilisée, vous optez pour fournir le nom souhaité exact, elle ne sera pas traitée plus loin.

Contrairement aux métadonnées inutilisées, ces remplacements ne déclenchent pas d’avertissement s’ils ne sont pas utilisés.

Respect de la casse

Les remplacements s’exécutent après la transformation automatique de la casse Pascal, mais la comparaison ne respecte pas la casse.

Par conséquent, les deux éléments suivants sont équivalents :

<AndroidNamespaceReplacement Include='Androidx' Replacement='AndroidX' />
<AndroidNamespaceReplacement Include='androidx' Replacement='AndroidX' />

Limites word

Les remplacements n’ont lieu que sur des mots complets (parties d’espace de noms).

Donc

<AndroidNamespaceReplacement Include='Com' Replacement='' />

Correspond aux correspondances Com.Google.Library, mais pas Common.Google.Library ou Google.Imaging.Dicom.

Plusieurs mots complets peuvent être utilisés :

<AndroidNamespaceReplacement Include='Com.Google' Replacement='Google' />
<AndroidNamespaceReplacement Include='Com.Androidx' Replacement='Microsoft.AndroidX' />

Position word

La correspondance de partie de mot peut être contrainte au début ou à la fin d’un espace de noms en ajoutant respectivement un . ou un prepending a ..

<AndroidNamespaceReplacement Include='Androidx.' Replacement='Microsoft.AndroidX' />

correspond Androidx.Core, mais pas Square.OkHttp.Androidx.

De même,

<AndroidNamespaceReplacement Include='.Compose' Replacement='ComposeUI' />

correspond Google.AndroidX.Compose, mais pas Google.Compose.Writer.

L’ajout et l’ajout d’une . correspondance exacte sont tous les deux prédéfinissants.

<AndroidNamespaceReplacement Include='.Androidx.' Replacement='Microsoft.AndroidX' />

correspond Androidx, mais pas Google.Androidx.Core.

Ordre de remplacement

Les remplacements s’exécutent dans l’ordre spécifié par le <ItemGroup>, mais l’ajout à ce groupe à différents moments peut entraîner un ordre inattendu.

Les remplacements sont exécutés séquentiellement, et plusieurs remplacements peuvent affecter un espace de noms unique.

<AndroidNamespaceReplacement Include='Androidx' Replacement='Microsoft.AndroidX' />
<AndroidNamespaceReplacement Include='View' Replacement='Views' />

modifications apportées Androidx.View à Microsoft.AndroidX.Views.

Relation avec les métadonnées

Techniquement @(AndroidNamespaceReplacement) est implémenté en tant que cas spécial de <metadata>, et peut être placé directement dans un fichier dans un metadata.xml fichier
formulaire de métadonnées si vous le souhaitez.

Autrement dit, l’élément MSBuild :

<ItemGroup>
  <AndroidNamespaceReplacement Include='com.microsoft' Replacement='Microsoft' />
</ItemGroup>

peut plutôt être placé sous metadata.xml la forme suivante :

<metadata>
  <ns-replace source='com.microsoft' replacement='Microsoft' />
</metadata>