Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Java-paketnamn matchar ofta inte C#-namnrymdskonventioner beror på problem som extra prefix och skillnader i versalisering.
Java-paketnamnet com.microsoft.streamwriters översätts till Com.Microsoft.Streamwriters exempel automatiskt eftersom bindningsprocessen automatiskt översätter namnområden till Pascal-fallet. Men en bättre passform skulle vara Microsoft.StreamWriters.
Detta kan åstadkommas genom att lägga till ett <AndroidNamespaceReplacement> objekt i projektfilen:
<ItemGroup>
<AndroidNamespaceReplacement Include='com.microsoft.streamwriters' Replacement='Microsoft.StreamWriters' />
</ItemGroup>
Även om Java-paket också kan byta namn med traditionella metadatakan det vara omständligt att byta namn på många liknande paket:
<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>
...
Med <AndroidNamespaceReplacement>kan samma MSBuild-transformering som placeras i projektfilen tillämpas på alla matchande paket:
<ItemGroup>
<AndroidNamespaceReplacement Include='com.microsoft' Replacement='Microsoft' />
</ItemGroup>
Specifikation
Dessa ersättningar körs endast för <package> element som inte anger ett metadata@managedName attribut.
Om @managedName används väljer du att ange det exakta önskade namnet, det bearbetas inte ytterligare.
Till skillnad från oanvända metadata ger ersättningen ingen varning om de inte används.
Skiftlägesberoende
Ersättningar körs efter den automatiska Pascal-skiftlägestransformeringen, men jämförelsen är skiftlägesokänslig.
Därför är båda av följande likvärdiga:
<AndroidNamespaceReplacement Include='Androidx' Replacement='AndroidX' />
<AndroidNamespaceReplacement Include='androidx' Replacement='AndroidX' />
Ordgräns
Ersättningar sker endast på fullständiga ord (namnområdesdelar).
Sålunda
<AndroidNamespaceReplacement Include='Com' Replacement='' />
Matchar Com.Google.Library, men inte Common.Google.Library eller Google.Imaging.Dicom.
Flera fullständiga ord kan användas:
<AndroidNamespaceReplacement Include='Com.Google' Replacement='Google' />
<AndroidNamespaceReplacement Include='Com.Androidx' Replacement='Microsoft.AndroidX' />
Ordposition
Orddelsmatchningen kan begränsas till början eller slutet av ett namnområde genom att lägga till ett . i slutet eller ett . i början.
<AndroidNamespaceReplacement Include='Androidx.' Replacement='Microsoft.AndroidX' />
matchar Androidx.Core, men inte Square.OkHttp.Androidx.
På samma sätt
<AndroidNamespaceReplacement Include='.Compose' Replacement='ComposeUI' />
matchar Google.AndroidX.Compose, men inte Google.Compose.Writer.
Både att lägga till i början och slutet av en . skapar en exakt matchning.
<AndroidNamespaceReplacement Include='.Androidx.' Replacement='Microsoft.AndroidX' />
matchar Androidx, men inte Google.Androidx.Core.
Ersättningsbeställning
Ersättningsoperationer utförs i den ordning som anges av <ItemGroup>, men om du lägger till nya element i gruppen vid olika tidpunkter kan detta resultera i en oavsiktlig sekvensordning.
Ersättningar körs sekventiellt och flera ersättningar kan påverka ett enda namnområde.
<AndroidNamespaceReplacement Include='Androidx' Replacement='Microsoft.AndroidX' />
<AndroidNamespaceReplacement Include='View' Replacement='Views' />
ändras Androidx.View till Microsoft.AndroidX.Views.
Relation till metadata
@(AndroidNamespaceReplacement) Tekniskt sett implementeras som ett specialfall av <metadata>, och kan placeras direkt i en metadata.xml fil i
metadataformulär om så önskas.
Det vill säga, MSBuild-objektet:
<ItemGroup>
<AndroidNamespaceReplacement Include='com.microsoft' Replacement='Microsoft' />
</ItemGroup>
kan i stället placeras i metadata.xml som:
<metadata>
<ns-replace source='com.microsoft' replacement='Microsoft' />
</metadata>