Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Názvy balíčků Java často neodpovídají konvencím oboru názvů jazyka C# kvůli problémům, jako jsou například nadbytečné předpony a rozdíly v psaní velkých písmen.
Například název balíčku Java com.microsoft.streamwriters by se automaticky přeložil na Com.Microsoft.Streamwriters, protože proces vazby automaticky překládá obory názvů na PascalCase. Nicméně lepší volba by bylo Microsoft.StreamWriters.
Toho lze dosáhnout přidáním <AndroidNamespaceReplacement> položky do souboru projektu:
<ItemGroup>
<AndroidNamespaceReplacement Include='com.microsoft.streamwriters' Replacement='Microsoft.StreamWriters' />
</ItemGroup>
I když se balíčky Java dají přejmenovat také pomocí tradičních metadata, může být zdlouhavé přejmenovat mnoho podobných balíčků:
<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>
...
Pomocí <AndroidNamespaceReplacement>, stejnou transformaci MSBuild umístěnou v souboru projektu lze použít pro všechny odpovídající balíčky:
<ItemGroup>
<AndroidNamespaceReplacement Include='com.microsoft' Replacement='Microsoft' />
</ItemGroup>
Specifikace
Tyto nahrazení budou spuštěny pouze pro <package> prvky, které nezadávají metadata@managedName atribut.
Pokud použijete @managedName, volíte poskytnout přesný požadovaný název, nebude se dále zpracovávat.
Na rozdíl od nepoužívaných metadat tato náhrada nevyvolá upozornění, pokud se nepoužívají.
Citlivost na velikost písmen
Nahrazení se spustí po automatické transformaci případu Pascal, ale porovnání nerozlišuje malá a velká písmena.
Obě z těchto možností jsou tedy ekvivalentní:
<AndroidNamespaceReplacement Include='Androidx' Replacement='AndroidX' />
<AndroidNamespaceReplacement Include='androidx' Replacement='AndroidX' />
Hranice wordu
Nahrazení probíhá pouze u celých slov (částí oboru názvů).
Takže
<AndroidNamespaceReplacement Include='Com' Replacement='' />
Odpovídá Com.Google.Library, ale ne Common.Google.Library nebo Google.Imaging.Dicom.
Můžete použít více celých slov:
<AndroidNamespaceReplacement Include='Com.Google' Replacement='Google' />
<AndroidNamespaceReplacement Include='Com.Androidx' Replacement='Microsoft.AndroidX' />
Pozice slova
Shoda části slova může být omezena na začátek nebo konec oboru názvů připojením . nebo předřazením ., v uvedeném pořadí.
<AndroidNamespaceReplacement Include='Androidx.' Replacement='Microsoft.AndroidX' />
odpovídá Androidx.Core, ale ne Square.OkHttp.Androidx.
Podobně,
<AndroidNamespaceReplacement Include='.Compose' Replacement='ComposeUI' />
odpovídá Google.AndroidX.Compose, ale ne Google.Compose.Writer.
Jak předřazení, tak připojení . zajistí přesnou shodu.
<AndroidNamespaceReplacement Include='.Androidx.' Replacement='Microsoft.AndroidX' />
odpovídá Androidx, ale ne Google.Androidx.Core.
Náhradní objednávka
Nahrazení se spouští v pořadí určeném <ItemGroup>, přidání do této skupiny v různých časech však může vést k nezamýšleným pořadím.
Nahrazení se spouští postupně a více nahrazení může mít vliv na jeden obor názvů.
<AndroidNamespaceReplacement Include='Androidx' Replacement='Microsoft.AndroidX' />
<AndroidNamespaceReplacement Include='View' Replacement='Views' />
změny Androidx.View na Microsoft.AndroidX.Views.
Vztah k metadatům
Z technického hlediska je @(AndroidNamespaceReplacement) jako zvláštní případ <metadata> implementováno a lze jej umístit přímo do souboru typu metadata.xml.
v případě potřeby metadatový formulář.
To znamená, že položka MSBuild:
<ItemGroup>
<AndroidNamespaceReplacement Include='com.microsoft' Replacement='Microsoft' />
</ItemGroup>
místo toho lze umístit metadata.xml jako:
<metadata>
<ns-replace source='com.microsoft' replacement='Microsoft' />
</metadata>