Alternativ för trimning
MsBuild-egenskaperna och objekten som beskrivs i den här artikeln påverkar beteendet för trimmade, fristående distributioner. Några av alternativen nämner ILLink
, som är namnet på det underliggande verktyget som implementerar trimning. Mer information om det underliggande verktyget finns i Trimmer-dokumentationen.
Trimning med PublishTrimmed
introducerades i .NET Core 3.0. De andra alternativen är tillgängliga i .NET 5 och senare versioner.
Aktivera trimning
<PublishTrimmed>true</PublishTrimmed>
Aktivera trimning under publicering. Den här inställningen inaktiverar även trim-inkompatibla funktioner och aktiverar trimningsanalys under bygget. I .NET 8 och senare appar möjliggör den här inställningen även konfigurationsbindning och begärandedelegatkällans generatorer.
Kommentar
Om du anger trimning som aktiverad från kommandoraden skiljer sig felsökningsupplevelsen åt och du kan stöta på ytterligare buggar i slutprodukten.
Placera den här inställningen i projektfilen för att säkerställa att inställningen gäller under dotnet build
, inte bara dotnet publish
.
Med den här inställningen kan du trimma och trimma alla sammansättningar som standard. I .NET 6 trimmades endast sammansättningar som valde att trimma via [AssemblyMetadata("IsTrimmable", "True")]
(läggs till i projekt som anger <IsTrimmable>true</IsTrimmable>
) som standard. Du kan återgå till det tidigare beteendet med hjälp <TrimMode>partial</TrimMode>
av .
Den här inställningen aktiverar även Roslyn-analysatorn för trimkompatibilitet och inaktiverar funktioner som inte är kompatibla med trimning.
Trimma kornighet
Använd egenskapen TrimMode
för att ange trimningskornigheten till antingen partial
eller full
. Standardinställningen för konsolappar (och från och med .NET 8 är full
Web SDK-appar) :
<TrimMode>full</TrimMode>
Om du bara vill trimma sammansättningar som har valt att trimma ställer du in egenskapen på partial
:
<TrimMode>partial</TrimMode>
Om du ändrar trimläget till partial
kan du välja enskilda sammansättningar för att trimma med hjälp av ett <TrimmableAssembly>
MSBuild-objekt.
<ItemGroup>
<TrimmableAssembly Include="MyAssembly" />
</ItemGroup>
Detta motsvarar inställningen [AssemblyMetadata("IsTrimmable", "True")]
när du skapar sammansättningen.
Rotsammansättningar
Om en sammansättning inte trimmas anses den vara "rotad", vilket innebär att den och alla dess statiskt förstådda beroenden behålls. Ytterligare sammansättningar kan "rotas" efter namn (utan .dll
tillägget):
<ItemGroup>
<TrimmerRootAssembly Include="MyAssembly" />
</ItemGroup>
Rotbeskrivningar
Ett annat sätt att ange rötter för analys är att använda en XML-fil som använder trimmerbeskrivningsformatet. På så sätt kan du rota specifika medlemmar i stället för en hel sammansättning.
<ItemGroup>
<TrimmerRootDescriptor Include="MyRoots.xml" />
</ItemGroup>
Kan till exempel MyRoots.xml
rota en specifik metod som används dynamiskt av programmet:
<linker>
<assembly fullname="MyAssembly">
<type fullname="MyAssembly.MyClass">
<method name="DynamicallyAccessedMethod" />
</type>
</assembly>
</linker>
Analysvarningar
<SuppressTrimAnalysisWarnings>false</SuppressTrimAnalysisWarnings>
Aktivera trimningsanalysvarningar.
Trimning tar bort IL som inte kan nås statiskt. Appar som använder reflektion eller andra mönster som skapar dynamiska beroenden kan brytas genom trimning. Om du vill varna för sådana mönster anger du <SuppressTrimAnalysisWarnings>
till false
. Den här inställningen visar varningar om hela appen, inklusive din egen kod, bibliotekskod och ramverkskod.
Roslyn analyzer
Inställningen PublishTrimmed
i .NET 6+ möjliggör också en Roslyn-analysator som visar en begränsad uppsättning analysvarningar. Du kan också aktivera eller inaktivera analysatorn oberoende av PublishTrimmed
.
<EnableTrimAnalyzer>true</EnableTrimAnalyzer>
Aktivera en Roslyn-analysator för en delmängd av trimningsanalysvarningar.
Ignorera varningar
Du kan utelämna enskilda varningskoder med hjälp av de vanliga MSBuild-egenskaperna som respekteras av verktygskedjan, inklusive NoWarn
, WarningsAsErrors
, WarningsNotAsErrors
och TreatWarningsAsErrors
. Det finns ytterligare ett alternativ som styr beteendet för ILLink-varning som-fel oberoende av varandra:
<ILLinkTreatWarningsAsErrors>false</ILLinkTreatWarningsAsErrors>
Behandla inte ILLink-varningar som fel. Detta kan vara användbart för att undvika att omvandla trimningsanalysvarningar till fel vid behandling av kompilatorvarningar som fel globalt.
Visa detaljerade varningar
I .NET 6+ ger trimanalys högst en varning för varje sammansättning som kommer från en PackageReference
, vilket indikerar att sammansättningens interna enheter inte är kompatibla med trimning. Du kan också visa enskilda varningar för alla sammansättningar:
<TrimmerSingleWarn>false</TrimmerSingleWarn>
Visa alla detaljerade varningar i stället för att komprimera dem till en enda varning per sammansättning.
Ta bort symboler
Symboler trimmas vanligtvis för att matcha de trimmade sammansättningarna. Du kan också ta bort alla symboler:
<TrimmerRemoveSymbols>true</TrimmerRemoveSymbols>
Ta bort symboler från det trimmade programmet, inklusive inbäddade PDF-filer och separata PDB-filer. Detta gäller både programkoden och eventuella beroenden som medföljer symboler.
SDK:et gör det också möjligt att inaktivera felsökningsstöd med hjälp av egenskapen DebuggerSupport
. När felsökningsstöd är inaktiverat tar trimning bort symboler automatiskt (TrimmerRemoveSymbols
standardvärdet är true).
Trimma ramverksbiblioteksfunktioner
Flera funktionsområden i ramverksbiblioteken levereras med trimmer-direktiv som gör det möjligt att ta bort koden för inaktiverade funktioner.
MSBuild-egenskap | beskrivning |
---|---|
AutoreleasePoolSupport |
När värdet är inställt false på tar bort kod som skapar pooler med automatisk förhandsversion på plattformar som stöds. false är standardvärdet för .NET SDK. |
DebuggerSupport |
När värdet är inställt på false tar bort kod som möjliggör bättre felsökning. Den här inställningen tar också bort symboler. |
EnableUnsafeBinaryFormatterSerialization |
När värdet är inställt på false tar bort BinaryFormatter-serialiseringsstöd. Mer information finns i BinaryFormatter serialiseringsmetoder är föråldrade och In-box BinaryFormatter implementering tas bort och alltid genererar. |
EnableUnsafeUTF7Encoding |
När värdet är inställt på false tar bort osäker UTF-7-kodningskod. Mer information finns i UTF-7-kodsökvägar är föråldrade. |
EventSourceSupport |
När värdet är inställt på false tar bort EventSource-relaterad kod och logik. |
HttpActivityPropagationSupport |
När det är inställt på false tar bort kod som är relaterad till diagnostikstöd för System.Net.Http. |
InvariantGlobalization |
När värdet är inställt på true tar bort globaliseringsspecifik kod och data. Mer information finns i Invariant-läge. |
MetadataUpdaterSupport |
När värdet är inställt på false tar bort metadatauppdateringsspecifik logik som är relaterad till frekvent omläsning. |
MetricsSupport |
När värdet är inställt på false tar bort stöd för System.Diagnostics.Metrics instrumentation. |
StackTraceSupport (.NET 8+) |
När värdet är inställt på false tar bort stödet för att generera stackspårningar (till exempel Environment.StackTrace eller Exception.ToString) av körningen. Mängden information som tas bort från stackspårningssträngar kan bero på andra distributionsalternativ. Det här alternativet påverkar inte stackspårningar som genereras av felsökare. |
UseNativeHttpHandler |
När värdet är inställt på true använder använder standardplattformen implementering av HttpMessageHandler för Android och iOS och tar bort den hanterade implementeringen. |
UseSystemResourceKeys |
När det är inställt på true tar bort undantagsmeddelanden för System.* sammansättningar. När ett undantag genereras från en System.* sammansättning är meddelandet ett förenklat resurs-ID i stället för det fullständiga meddelandet. |
XmlResolverIsNetworkingEnabledByDefault (.NET 8+) |
När värdet är inställt på false tar bort stödet för att matcha icke-fil-URL:er i System.Xml. Endast filsystemsupplösande stöds. |
Dessa egenskaper gör att den relaterade koden trimmas och även inaktiverar funktioner via runtimeconfig-filen . Mer information om dessa egenskaper, inklusive motsvarande körningskonfigurationsalternativ , finns i funktionsväxlar. Vissa SDK:er kan ha standardvärden för dessa egenskaper.
Ramverksfunktioner inaktiverade vid trimning
Följande funktioner är inte kompatibla med trimning eftersom de kräver kod som inte refereras statiskt. Dessa funktioner är inaktiverade som standard i trimmade appar.
Varning
Aktivera dessa funktioner på egen risk. De kommer sannolikt att bryta trimmade appar utan extra arbete för att bevara den dynamiskt refererade koden.
<BuiltInComInteropSupport>
Inbyggt COM-stöd är inaktiverat.
<CustomResourceTypesSupport>
Användning av anpassade resurstyper stöds inte. ResourceManager-kodsökvägar som använder reflektion för anpassade resurstyper trimmas.
<EnableCppCLIHostActivation>
C++/CLI-värdaktivering är inaktiverad.
<EnableUnsafeBinaryFormatterInDesigntimeLicenseContextSerialization>
DesigntimeLicenseContextSerializer användningen av
BinaryFormatter
serialisering är inaktiverad.<StartupHookSupport>
Det går inte att köra kod tidigare
Main
medDOTNET_STARTUP_HOOKS
. Mer information finns i startkroken för värd.