Sdílet prostřednictvím


Známé nekompatibility s oříznutím

Tento článek uvádí vzory, které nejsou kompatibilní s oříznutím pomocí aktuálního nástroje.

Serializátory založené na reflexi

Alternativa: Serializátory bez reflexe.

Mnoho použití reflexe může být kompatibilní s oříznutím, jak je popsáno v Úvodu k oříznutí upozornění. Serializátory však mají tendenci mít složité použití reflexe. Mnoho z těchto použití se nedá analyzovat v době sestavení. Nejlepší možností je bohužel často přepisovat systém tak, aby používal generování zdroje.

Následující tabulka uvádí oblíbené serializátory založené na reflexi a jejich doporučené alternativy:

Serializátory Alternativa
Newtonsoft.Json Zdroj vygenerovaný System.Text.Json
System.Configuration.ConfigurationManager generátor zdroje pro vazbu konfigurace
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter Kvůli chybám zabezpečení a spolehlivosti migrujte ze serializace BinaryFormatter.

Generování kódu za běhu prostřednictvím JIT

Generování kódu za běhu prostřednictvím JIT, například prostřednictvím System.Reflection.Emit, je nekompatibilní s redukcí.

Dynamické načítání a spouštění softwarového sestavení

Oříznutí a dynamické načítání assembly je běžným problémem pro systémy, které podporují pluginy nebo rozšíření, obvykle přes API, jako je LoadFrom(String). Oříznutí spoléhá na zobrazení všech sestavení při sestavování, takže ví, který kód se používá, a nelze jej oříznout. Většina systémů plug-in načítá kód třetí strany dynamicky, takže není možné, aby se zastřihovací modul zjistil, jaký kód je potřeba.

Nekompatibilita platformy Windows

Následující části obsahují seznam známých nekompatibility s oříznutím ve Windows.

Programování v NET s využitím C++/CLI

Programování v jazyce C++/CLI v současné době nepodporuje ořezávání.

Integrované maršálování COM

Alternativní řešení: Obálky COM

Automatické marshalling COM je integrováno do .NET již od .NET Framework 1.0. Používá analýzu kódu za běhu k automatickému převodu mezi nativními objekty MODELU COM a spravovanými objekty .NET. Bohužel, analýza zkracování kódu ne vždy dokáže předpovědět, který .NET kód je třeba zachovat pro automatické maršálování COM. Pokud se místo toho použijí obálky COM, analýza oříznutí může zaručit, že všechen použitý kód bude správně zachován.

WPF (Windows Presentation Foundation)

Architektura WPF (Windows Presentation Foundation) výrazně využívá reflexi a některé funkce jsou silně závislé na kontrole kódu za běhu. Analýza oříznutí nemůže zachovat veškerý potřebný kód pro aplikace WPF. Po oříznutí bohužel nelze spustit téměř žádné aplikace WPF, takže podpora oříznutí pro WPF je nyní v sadě .NET SDK zakázaná. Podívejte se na problém WPF není kompatibilní s ořezáním pro informace o postupu při umožnění ořezávání pro WPF.

Windows Forms

Rámec Windows Forms používá minimálně reflexi, ale výrazně se spoléhá na vestavěné COM marshalling. Bohužel, téměř žádné aplikace Windows Forms se nedají spustit bez integrovaného zprostředkování COM, takže podpora zkracování pro aplikace Windows Forms je v sadě .NET SDK aktuálně zakázaná. Informace o pokroku při povolování ořezávání pro Windows Forms najdete v tématu Řešení kompatibility ořezávání s WinForms.