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