Dela via


Kända trimnings-inkompatibiliteter

Den här artikeln innehåller mönster som inte är kompatibla med trimning med den aktuella verktygsuppsättningen.

Reflektionsbaserade serialiserare

Alternativ: Reflektionsfria serialiserare.

Många användningar av reflektion kan göras trimningskompatibla, enligt beskrivningen i Introduktion till trimningsvarningar. Serialiserare tenderar dock att ha komplex användning av reflektion. Många av dessa användningsområden kan inte analyseras vid byggtiden. Tyvärr är det bästa alternativet ofta att skriva om systemet för att använda källgenerering.

I följande tabell visas populära reflektionsbaserade serialiserare och deras rekommenderade alternativ:

Serialiserare Alternativ
Newtonsoft.Json Källa som genererats System.Text.Json
System.Configuration.ConfigurationManager Generator för konfigurationsbindningskälla
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter Migrera bort från BinaryFormatter-serialisering på grund av dess säkerhets- och tillförlitlighetsfel.

Körningskodgenerering via JIT

Körningskodgenerering via JIT är till exempel inte System.Reflection.Emit kompatibel med trimning.

Dynamisk monteringsinläsning och körning

Trimning och dynamisk monteringsinläsning är ett vanligt problem för system som stöder plugin-program eller tillägg, vanligtvis via API:er som LoadFrom(String). Trimning förlitar sig på att se alla sammansättningar vid byggtiden, så att den vet vilken kod som används och inte kan trimmas bort. De flesta plugin-system läser in kod från tredje part dynamiskt, så det är inte möjligt för trimmern att identifiera vilken kod som behövs.

Inkompatibiliteter för Windows-plattformen

I följande avsnitt listas kända inkompatibiliteter med trimning i Windows.

NET-programmering med C++/CLI

NET-programmering med C++/CLI stöder för närvarande inte trimning.

Inbyggd COM-marshalling

Alternativ: COM-omslutning

Automatisk COM-marshalling har byggts in i .NET sedan .NET Framework 1.0. Den använder körningskodanalys för att automatiskt konvertera mellan interna COM-objekt och hanterade .NET-objekt. Tyvärr kan trimningsanalys inte alltid förutsäga vilken .NET-kod som behöver bevaras för automatisk COM-marshalling. Men om COM-omslutning används i stället kan trimningsanalysen garantera att all kod som används bevaras korrekt.

WPF

WPF-ramverket (Windows Presentation Foundation) använder sig av reflektion och vissa funktioner är starkt beroende av körningskodgranskning. Det går inte att trimma analys för att bevara all nödvändig kod för WPF-program. Tyvärr är nästan inga WPF-appar körbara efter trimning, så trimningsstöd för WPF är för närvarande inaktiverat i .NET SDK. Se WPF är inte trimkompatibelt problem för förlopp vid aktivering av trimning för WPF.

Windows Forms

Windows Forms-ramverket använder minimal reflektion, men är starkt beroende av inbyggd COM-marshalling. Tyvärr kan nästan inga Windows Forms-appar köras utan inbyggd COM-marshalling, så trimningsstöd för Windows Forms-appar är inaktiverat i .NET SDK för närvarande. Mer information om hur du aktiverar trimning för Windows Forms finns i Göra WinForms-trimningskompatibelt .