Delen via


Opties voor bijsnijden

De MSBuild-eigenschappen en -items die in dit artikel worden beschreven, beïnvloeden het gedrag van ingekorte, zelfstandige implementaties. Enkele van de opties vermelden ILLink, wat de naam is van het onderliggende hulpprogramma dat bijsnijden implementeert. Zie de documentatie van Trimmer voor meer informatie over het onderliggende hulpprogramma.

Bijsnijden met PublishTrimmed is geïntroduceerd in .NET Core 3.0. De andere opties zijn beschikbaar in .NET 5 en nieuwere versies.

Bijsnijden inschakelen

  • <PublishTrimmed>true</PublishTrimmed>

    Schakel bijsnijden in tijdens het publiceren. Met deze instelling schakelt u ook incompatibele functies voor knippen uit en schakelt u tijdens de build een trimanalyse in. In .NET 8- en hoger-apps schakelt deze instelling ook de configuratiebinding in en vraagt u gemachtigde brongeneratoren aan.

Notitie

Als u bijsnijden opgeeft zoals ingeschakeld vanaf de opdrachtregel, verschilt uw foutopsporingservaring en kunnen er extra fouten optreden in het eindproduct.

Plaats deze instelling in het projectbestand om ervoor te zorgen dat de instelling van toepassing is, dotnet buildniet alleen dotnet publish.

Met deze instelling kunt u standaard alle assembly's bijsnijden en knippen. In .NET 6 zijn alleen assembly's die zich hebben aangemeld voor bijsnijden via [AssemblyMetadata("IsTrimmable", "True")] (toegevoegd in projecten die zijn ingesteld <IsTrimmable>true</IsTrimmable>) standaard ingekort. U kunt terugkeren naar het vorige gedrag met behulp van <TrimMode>partial</TrimMode>.

Met deze instelling wordt ook de trimcompatibiliteit Roslyn Analyzer ingeschakeld en worden functies uitgeschakeld die niet compatibel zijn met bijsnijden.

Granulariteit bijsnijden

Gebruik de TrimMode eigenschap om de granulariteit van het bijsnijden in te stellen op partial of full. De standaardinstelling voor console-apps (en vanaf .NET 8, Web SDK-apps) is full:

<TrimMode>full</TrimMode>

Als u alleen assembly's wilt bijsnijden die zijn aangemeld voor bijsnijden, stelt u de eigenschap partialin op:

<TrimMode>partial</TrimMode>

Als u de trimmodus partialwijzigt in , kunt u afzonderlijke assembly's inschakelen om bij te snijden met behulp van een <TrimmableAssembly> MSBuild-item.

<ItemGroup>
  <TrimmableAssembly Include="MyAssembly" />
</ItemGroup>

Dit komt overeen met de instelling [AssemblyMetadata("IsTrimmable", "True")] bij het bouwen van de assembly.

Hoofdassembly's

Als een assembly niet wordt ingekort, wordt deze beschouwd als 'geroot', wat betekent dat het en alle statisch begrepen afhankelijkheden worden bewaard. Extra assembly's kunnen op naam worden geroot (zonder de .dll extensie):

<ItemGroup>
  <TrimmerRootAssembly Include="MyAssembly" />
</ItemGroup>

Hoofddescriptors

Een andere manier om hoofdmappen voor analyse op te geven, is het gebruik van een XML-bestand dat gebruikmaakt van de indeling van de trimmerdescriptor. Hiermee kunt u specifieke leden rooten in plaats van een hele assembly.

<ItemGroup>
  <TrimmerRootDescriptor Include="MyRoots.xml" />
</ItemGroup>

U kunt bijvoorbeeld MyRoots.xml een specifieke methode rooten die dynamisch wordt geopend door de toepassing:

<linker>
  <assembly fullname="MyAssembly">
    <type fullname="MyAssembly.MyClass">
      <method name="DynamicallyAccessedMethod" />
    </type>
  </assembly>
</linker>

Analysewaarschuwingen

  • <SuppressTrimAnalysisWarnings>false</SuppressTrimAnalysisWarnings>

    Schakel waarschuwingen voor trimanalyse in.

Met bijsnijden wordt IL verwijderd die niet statisch bereikbaar is. Apps die gebruikmaken van weerspiegeling of andere patronen die dynamische afhankelijkheden maken, kunnen worden verbroken door bij te snijden. Als u wilt waarschuwen voor dergelijke patronen, stelt u deze in <SuppressTrimAnalysisWarnings> op false. Deze instelling geeft waarschuwingen weer over de hele app, inclusief uw eigen code, bibliotheekcode en frameworkcode.

Roslyn Analyzer

Instelling PublishTrimmed in .NET 6+ maakt ook een Roslyn-analysefunctie mogelijk die een beperkte set analysewaarschuwingen weergeeft. U kunt de analyse ook onafhankelijk van PublishTrimmed.

  • <EnableTrimAnalyzer>true</EnableTrimAnalyzer>

    Schakel een Roslyn Analyzer in voor een subset van trimanalysewaarschuwingen.

Waarschuwingen onderdrukken

U kunt afzonderlijke waarschuwingscodes onderdrukken met de gebruikelijke MSBuild-eigenschappen die worden gerespecteerd door de toolchain, waaronder NoWarn, WarningsAsErrors, WarningsNotAsErrorsen TreatWarningsAsErrors. Er is een extra optie waarmee het ILLink-gedrag voor waarschuwen als-fout onafhankelijk wordt beheerd:

  • <ILLinkTreatWarningsAsErrors>false</ILLinkTreatWarningsAsErrors>

    IlLink-waarschuwingen worden niet als fouten behandeld. Dit kan handig zijn om te voorkomen dat u trimanalysewaarschuwingen kunt omzetten in fouten bij het behandelen van compilerwaarschuwingen als fouten wereldwijd.

Gedetailleerde waarschuwingen weergeven

In .NET 6+ produceert trimanalyse maximaal één waarschuwing voor elke assembly die afkomstig is van een PackageReference, wat aangeeft dat de interne onderdelen van de assembly niet compatibel zijn met bijsnijden. U kunt ook afzonderlijke waarschuwingen voor alle assembly's weergeven:

  • <TrimmerSingleWarn>false</TrimmerSingleWarn>

    Alle gedetailleerde waarschuwingen weergeven in plaats van ze samen te vouwen tot één waarschuwing per assembly.

Symbolen verwijderen

Symbolen worden meestal ingekort zodat ze overeenkomen met de bijgesneden assembly's. U kunt ook alle symbolen verwijderen:

  • <TrimmerRemoveSymbols>true</TrimmerRemoveSymbols>

    Verwijder symbolen uit de bijgesneden toepassing, inclusief ingesloten PDBs en afzonderlijke PDB-bestanden. Dit geldt voor zowel de toepassingscode als eventuele afhankelijkheden die bij symbolen worden geleverd.

De SDK maakt het ook mogelijk om ondersteuning voor foutopsporingsprogramma's uit te schakelen met behulp van de eigenschap DebuggerSupport. Wanneer ondersteuning voor foutopsporingsprogramma's is uitgeschakeld, worden symbolen automatisch verwijderd (TrimmerRemoveSymbols wordt standaard ingesteld op true).

Frameworkbibliotheekfuncties knippen

Verschillende functiegebieden van de frameworkbibliotheken worden geleverd met trimmerrichtlijnen waarmee de code voor uitgeschakelde functies kan worden verwijderd.

MSBuild-eigenschap Beschrijving
AutoreleasePoolSupport Wanneer deze optie is ingesteldfalse, verwijdert u code waarmee automatischreleasepools op ondersteunde platforms worden gemaakt. false is de standaardwaarde voor de .NET SDK.
DebuggerSupport Als deze optie is ingesteld false, verwijdert u code die betere foutopsporingservaringen mogelijk maakt. Met deze instelling worden ook symbolen verwijderd.
EnableUnsafeBinaryFormatterSerialization Als deze optie is ingesteld false, verwijdert u de serialisatieondersteuning van BinaryFormatter. Zie BinaryFormatter-serialisatiemethoden zijn verouderd en in-box BinaryFormatter-implementatie verwijderd en genereert altijd.
EnableUnsafeUTF7Encoding Als deze optie is ingesteld false, verwijdert u onveilige UTF-7-coderingscode. Zie UTF-7-codepaden zijn verouderd voor meer informatie.
EventSourceSupport Als deze optie is ingesteld false, verwijdert u eventSource-gerelateerde code en logica.
HttpActivityPropagationSupport Als deze optie is ingesteld false, verwijdert u code met betrekking tot diagnostische ondersteuning voor System.Net.Http.
InvariantGlobalization Wanneer deze optie is ingesteld true, verwijdert u globalisatiespecifieke code en gegevens. Zie de invariantmodus voor meer informatie.
MetadataUpdaterSupport Als deze optie is ingesteld false, verwijdert u updatelogica voor metagegevens met betrekking tot het opnieuw laden van dynamische bestanden.
MetricsSupport Als deze optie is ingesteld false, wordt de ondersteuning voor System.Diagnostics.Metrics instrumentatie verwijderd.
StackTraceSupport (.NET 8+) Als deze optie is ingesteld false, verwijdert u de ondersteuning voor het genereren van stacktraceringen (bijvoorbeeld Environment.StackTrace of Exception.ToString) door de runtime. De hoeveelheid informatie die uit stacktraceringstekenreeksen wordt verwijderd, is mogelijk afhankelijk van andere implementatieopties. Deze optie heeft geen invloed op stack-traceringen die worden gegenereerd door foutopsporingsprogramma's.
UseNativeHttpHandler Wanneer deze optie is ingesteld true, wordt de standaardplatform geïmplementeerd voor HttpMessageHandler Android en iOS en wordt de beheerde implementatie verwijderd.
UseSystemResourceKeys Wanneer deze is ingesteld true, worden uitzonderingsberichten voor System.* assembly's in de weg gezet. Wanneer er een uitzondering wordt gegenereerd vanuit een System.* assembly, is het bericht een vereenvoudigde resource-id in plaats van het volledige bericht.
XmlResolverIsNetworkingEnabledByDefault (.NET 8+) Als deze optie is ingesteld false, verwijdert u de ondersteuning voor het omzetten van NIET-bestands-URL's in System.Xml. Alleen het oplossen van bestanden wordt ondersteund.

Deze eigenschappen zorgen ervoor dat de gerelateerde code wordt ingekort en dat functies ook worden uitgeschakeld via het runtimeconfig-bestand . Zie functieswitches voor meer informatie over deze eigenschappen, inclusief de bijbehorende runtimeconfiguratieopties. Sommige SDK's hebben mogelijk standaardwaarden voor deze eigenschappen.

Frameworkfuncties uitgeschakeld bij bijsnijden

De volgende functies zijn niet compatibel met bijsnijden, omdat ze code vereisen waarnaar niet statisch wordt verwezen. Deze functies zijn standaard uitgeschakeld in bijgesneden apps.

Waarschuwing

Schakel deze functies op eigen risico in. Het is waarschijnlijk dat ze bijgesneden apps breken zonder extra werk om de dynamisch verwezen code te behouden.

  • <BuiltInComInteropSupport>

    Ingebouwde COM-ondersteuning is uitgeschakeld.

  • <CustomResourceTypesSupport>

    Het gebruik van aangepaste resourcetypen wordt niet ondersteund. ResourceManager-codepaden die gebruikmaken van weerspiegeling voor aangepaste resourcetypen, worden ingekort.

  • <EnableCppCLIHostActivation>

    Activering van C++/CLI-host is uitgeschakeld.

  • <EnableUnsafeBinaryFormatterInDesigntimeLicenseContextSerialization>

    DesigntimeLicenseContextSerializer het gebruik van BinaryFormatter serialisatie is uitgeschakeld.

  • <StartupHookSupport>

    Het uitvoeren van code voordat Main met DOTNET_STARTUP_HOOKS wordt niet ondersteund. Zie de opstarthook van de host voor meer informatie.