Névterek testreszabása

A Java-csomagnevek gyakran nem egyeznek a C# névtérkonvenciáival olyan problémák miatt, mint a további előtagok és a nagybetűs különbségek.

A Java-csomag neve com.microsoft.streamwriters például automatikusan le lesz fordítva Com.Microsoft.Streamwriters , mert a kötési folyamat automatikusan lefordítja a névtereket Pascal-esetre. Azonban egy jobb illeszkedés lenne Microsoft.StreamWriters.

Ezt úgy teheti meg, hogy hozzáad egy <AndroidNamespaceReplacement> elemet a projektfájlhoz:

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

Bár a Java-csomagok hagyományos metadatahasználatával is átnevezhetők, sok hasonló csomag átnevezése nehézkes lehet:

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

Ezzel <AndroidNamespaceReplacement>a projektfájlban elhelyezett MSBuild átalakítás az összes egyező csomagra alkalmazható:

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

Specification

Ezek a cserék csak olyan elemek esetén <package> lesznek futtatva, amelyek nem adnak meg attribútumot metadata@managedName .
Ha @managedName opciót választja, a pontos kívánt nevet megadja, a rendszer nem dolgozza fel tovább.

A nem használt metaadatokkal ellentétben ezek a csere nem fog figyelmeztetést generálni, ha használaton kívül vannak.

Betűérzékenység

A csere az automatikus Pascal-esetátalakítás után fut, de az összehasonlítás nem érzékeny a kis- és nagybetűkre.

Így a következők mindegyike egyenértékű:

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

Word-korlátok

A csere csak teljes szavakon (névtérrészeken) történik.

Így

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

Az Com.Google.Library egyezik, de Common.Google.Library vagy Google.Imaging.Dicom nem.

Több teljes szó is használható:

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

Szó pozíciója

A szórész-egyezés korlátozható a névtér elejére a . előtételével vagy a végére a . hozzáfűzésével.

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

Megfelel Androidx.Core, de nem Square.OkHttp.Androidx.

Hasonlóképpen:

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

illik Google.AndroidX.Compose, de nem Google.Compose.Writer.

Az előtoldás vagy a hozzáfűzés a . esetén pontos egyezést eredményez.

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

egyezések Androidx, de nem Google.Androidx.Core.

Csererendelés

A cserék a megadott <ItemGroup>sorrendben futnak, de a csoporthoz különböző időpontokban történő hozzáadása nem kívánt sorrendet eredményezhet.

A cserék egymás után futnak, és több csere is hatással lehet egyetlen névtérre.

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

változtatja Androidx.View-t Microsoft.AndroidX.Views-re.

Metaadatokhoz való viszony

@(AndroidNamespaceReplacement) Technikailag speciális esetként van megvalósítva <metadata>-ként, és közvetlenül elhelyezhető egy metadata.xml fájlban.
szükség esetén metaadat-űrlap.

Vagyis az MSBuild elem:

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

ehelyett a következőként helyezhető el metadata.xml :

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