Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Java-Paketnamen stimmen häufig aufgrund von Problemen wie zusätzlichen Präfixen und Großschreibungsunterschieden häufig nicht mit C#-Namespacekonventionen überein.
Beispielsweise würde der Java-Paketname com.microsoft.streamwriters automatisch zu Com.Microsoft.Streamwriters übersetzt, da der Bindungsprozess Namespaces automatisch in Pascal-Schreibweise übersetzt. Jedoch wäre eine bessere Passform Microsoft.StreamWriters.
Dies kann durch Hinzufügen eines <AndroidNamespaceReplacement> Elements zur Projektdatei erreicht werden:
<ItemGroup>
<AndroidNamespaceReplacement Include='com.microsoft.streamwriters' Replacement='Microsoft.StreamWriters' />
</ItemGroup>
Obwohl Java-Pakete auch durch herkömmliche Methoden metadata umbenannt werden können, kann es mühsam sein, viele ähnliche Pakete umzubenennen.
<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>
...
Mit <AndroidNamespaceReplacement> kann die gleiche MSBuild-Transformation, die in der Projektdatei platziert wird, auf alle übereinstimmenden Pakete angewendet werden.
<ItemGroup>
<AndroidNamespaceReplacement Include='com.microsoft' Replacement='Microsoft' />
</ItemGroup>
Spezifikation
Diese Ersetzungen werden nur für <package> Elemente ausgeführt, die kein Attribut angeben metadata@managedName .
Wenn @managedName verwendet wird, entscheiden Sie sich dafür, den exakten gewünschten Namen anzugeben, und er wird nicht weiter verarbeitet.
Im Gegensatz zu nicht verwendeten Metadaten löst diese Ersetzung keine Warnung aus, wenn sie nicht verwendet werden.
Groß- und Kleinschreibungssensitivität
Ersetzungen werden nach der automatischen Pascal-Schreibweise-Umwandlung ausgeführt, bei der der Vergleich jedoch nicht auf Groß-/Kleinschreibung achtet.
Daher sind beide der folgenden Äquivalente:
<AndroidNamespaceReplacement Include='Androidx' Replacement='AndroidX' />
<AndroidNamespaceReplacement Include='androidx' Replacement='AndroidX' />
Wortgrenzen
Ersetzungen erfolgen nur für vollständige Wörter (Namespaceteile).
Somit
<AndroidNamespaceReplacement Include='Com' Replacement='' />
Die Übereinstimmung passt zu Com.Google.Library, aber nicht zu Common.Google.Library oder Google.Imaging.Dicom.
Mehrere vollständige Wörter können verwendet werden:
<AndroidNamespaceReplacement Include='Com.Google' Replacement='Google' />
<AndroidNamespaceReplacement Include='Com.Androidx' Replacement='Microsoft.AndroidX' />
Wortposition
Die Übereinstimmung des Wortteils kann auf den Anfang oder das Ende eines Namespaces beschränkt werden, indem ein . angehängt oder ein . vorangestellt wird.
<AndroidNamespaceReplacement Include='Androidx.' Replacement='Microsoft.AndroidX' />
entspricht Androidx.Core, aber nicht Square.OkHttp.Androidx.
Auf ähnliche Weise,
<AndroidNamespaceReplacement Include='.Compose' Replacement='ComposeUI' />
entspricht Google.AndroidX.Compose, aber nicht Google.Compose.Writer.
Sowohl das Voranstellen als auch das Anhängen eines . Elements führt zu einer exakten Übereinstimmung.
<AndroidNamespaceReplacement Include='.Androidx.' Replacement='Microsoft.AndroidX' />
stimmt mit Androidx überein, aber nicht mit Google.Androidx.Core.
Ersatzauftrag
Ersetzungen werden in der durch <ItemGroup> spezifizierten Reihenfolge ausgeführt; wenn jedoch zu unterschiedlichen Zeiten zu dieser Gruppe hinzugefügt wird, kann dies zu einer unbeabsichtigten Reihenfolge führen.
Ersetzungen werden sequenziell ausgeführt, und mehrere Ersetzungen können sich auf einen einzelnen Namespace auswirken.
<AndroidNamespaceReplacement Include='Androidx' Replacement='Microsoft.AndroidX' />
<AndroidNamespaceReplacement Include='View' Replacement='Views' />
wechselt Androidx.View in Microsoft.AndroidX.Views.
Beziehung zu Metadaten
Technisch wird @(AndroidNamespaceReplacement) als Sonderfall von <metadata> implementiert und kann direkt in einer metadata.xml-Datei platziert werden.
Metadatenformular bei Bedarf.
Das heißt, das MSBuild-Element:
<ItemGroup>
<AndroidNamespaceReplacement Include='com.microsoft' Replacement='Microsoft' />
</ItemGroup>
könnte stattdessen in metadata.xml folgendem Format platziert werden:
<metadata>
<ns-replace source='com.microsoft' replacement='Microsoft' />
</metadata>