Freigeben über


Kürzungsoptionen

Die in diesem Artikel beschriebenen MSBuild-Eigenschaften und -Elemente beeinflussen das Verhalten von gekürzten, eigenständigen Bereitstellungen. Im Zusammenhang mit einigen Optionen wird ILLink erwähnt. Dies ist der Name des zugrunde liegenden Tools, das die Kürzung implementiert. Weitere Informationen zum zugrunde liegenden Tool finden Sie in der Trimmer-Dokumentation.

Das Kürzen mit PublishTrimmed wurde in .NET Core 3.0 eingeführt. Die anderen Optionen sind in .NET 5 und höheren Versionen verfügbar.

Aktivieren der Kürzung

  • <PublishTrimmed>true</PublishTrimmed>

    Aktivieren Sie die Kürzung während der Veröffentlichung. Diese Einstellung deaktiviert auch nicht kompatible Trim-Features und ermöglicht die Kürzungsanalyse während des Builds. In .NET 8 und höher-Apps ermöglicht diese Einstellung auch die Konfigurationsbindung und die Anforderung von Stellvertretungsquellengeneratoren.

Hinweis

Wenn Sie den Kürzungsvorgang als aktiviert in der Befehlszeile angeben, unterscheidet sich die Debugerfahrung, und es treten möglicherweise zusätzliche Fehler im Endprodukt auf.

Legen Sie diese Einstellung in der Projektdatei fest, um sicherzustellen, dass sie auch während dotnet build und nicht nur bei dotnet publish angewendet wird.

Diese Einstellung aktiviert auch das Roslyn-Analysetool für Kürzungskompatibilität und deaktiviert Features, die nicht für die Kürzung geeignet sind.

Roslyn-Analysetool

Wenn Sie PublishTrimmed in .NET 6 und höher festlegen, wird auch ein Roslyn-Analysetool aktiviert, das begrenzte Analysewarnungen anzeigt. Sie können das Analysetool auch unabhängig von PublishTrimmed aktivieren oder deaktivieren.

  • <EnableTrimAnalyzer>true</EnableTrimAnalyzer>

    Aktivieren Sie ein Roslyn-Analysetool für eine Teilmenge der Kürzungsanalysewarnungen.

Unterdrücken von Warnungen

Sie können einzelne Warnungscodes mithilfe der üblichen MSBuild-Eigenschaften unterdrücken, die von der Toolkette berücksichtigt werden, darunter NoWarn, WarningsAsErrors, WarningsNotAsErrors und TreatWarningsAsErrors. Es gibt eine zusätzliche Option, die das ILLink-Warn-as-Error-Verhalten unabhängig voneinander steuert:

  • <ILLinkTreatWarningsAsErrors>false</ILLinkTreatWarningsAsErrors>

    Behandeln Sie ILLink-Warnungen nicht als Fehler. Dies kann hilfreich sein, um zu vermeiden, dass Warnungen zur Kürzung von Analysen in Fehler umgewandelt werden, wenn Compilerwarnungen global als Fehler behandelt werden.

Anzeigen ausführlicher Warnungen

In .NET 6 und höher wird bei der Kürzungsanalyse für jede Assembly, die aus einer PackageReference stammt, höchstens eine Warnung erzeugt, die angibt, dass die internen Daten der Assembly aus Kompatibilitätsgründen nicht gekürzt werden können. Sie können auch einzelne Warnungen für alle Assemblys anzeigen:

  • <TrimmerSingleWarn>false</TrimmerSingleWarn>

    Zeigen Sie alle detaillierten Warnungen an, anstatt sie auf eine einzelne Warnung pro Assembly zu reduzieren.

Entfernen von Symbolen

Symbole werden in der Regel gekürzt, damit sie mit den gekürzten Assemblys übereinstimmen. Sie können auch alle Symbole entfernen:

  • <TrimmerRemoveSymbols>true</TrimmerRemoveSymbols>

    Entfernen Sie Symbole aus der gekürzten Anwendung einschließlich eingebetteter und separater PDB-Dateien. Dies gilt sowohl für den Anwendungscode als auch für alle Abhängigkeiten mit Symbolen.

Das SDK ermöglicht außerdem die Deaktivierung der Debuggerunterstützung mithilfe der Eigenschaft DebuggerSupport. Wenn die Debuggerunterstützung deaktiviert ist, entfernt das Kürzen automatisch Symbole (TrimmerRemoveSymbols wird standardmäßig auf "true" festgelegt).

Kürzen von Frameworkbibliotheksfeatures

Mehrere Featurebereiche der Frameworkbibliotheken enthalten Trimmeranweisungen, die es ermöglichen, den Code für deaktivierte Features zu entfernen.

MSBuild-Eigenschaft Beschreibung
AutoreleasePoolSupport Bei Festlegung auf false, entfernt Code, der Autorelease-Pools auf unterstützten Plattformen erstellt. false ist die Standardeinstellung für das .NET SDK.
DebuggerSupport Wenn diese Einstellung auf false" festgelegt ist , entfernt Code, der eine bessere Debugerfahrung ermöglicht. Durch diese Einstellung werden Symbole auch entfernt.
EnableUnsafeBinaryFormatterSerialization Wenn diese Option auf false"BinaryFormatter" festgelegt ist, wird die Serialisierungsunterstützung für BinaryFormatter entfernt. Weitere Informationen finden Sie unter BinaryFormatter serialization methods are obsolete and In-box BinaryFormatter implementation removed and always throws.
EnableUnsafeUTF7Encoding Bei Festlegung auf false, entfernt unsicheren UTF-7-Codierungscode. Weitere Informationen finden Sie unter UTF-7-Codepfade sind veraltet.
EventSourceSupport Bei Festlegung auf false, entfernt EventSource-bezogenen Code und Logik.
Http3Support (.NET 10+) Bei Festlegung auf false, entfernt Code im Zusammenhang mit der Unterstützung für HTTP/3 in System.Net.Http.
HttpActivityPropagationSupport Bei Festlegung auf false, entfernt Code im Zusammenhang mit der Diagnoseunterstützung für System.Net.Http.
InvariantGlobalization Bei Festlegung auf true, werden globalisierungsspezifischer Code und Daten entfernt. Weitere Informationen finden Sie unter Invarianter Modus.
MetadataUpdaterSupport Bei Festlegung auf false, entfernt Metadatenaktualisierungs-spezifische Logik im Zusammenhang mit dem hot reload.
MetricsSupport Wenn diese Einstellung auf false" festgelegt ist , wird die Unterstützung für System.Diagnostics.Metrics die Instrumentierung entfernt.
StackTraceSupport (.NET 8+) Bei Festlegung auf false, entfernt die Unterstützung für das Generieren von Stapelablaufverfolgungen (z. B Environment.StackTrace . oder Exception.ToString) durch die Laufzeit. Die Menge der Informationen, die aus Stapelablaufverfolgungszeichenfolgen entfernt werden, hängt möglicherweise von anderen Bereitstellungsoptionen ab. Diese Option wirkt sich nicht auf Stapelablaufverfolgungen aus, die von Debuggern generiert werden.
UseNativeHttpHandler Bei Festlegung auf true, verwendet die Standardplattformimplementierung für HttpMessageHandler Android und iOS und entfernt die verwaltete Implementierung.
UseSizeOptimizedLinq (.NET 10+) Bei Festlegung auf true, entfernt einige der Durchsatzoptimierungen in LINQ, die sich negativ auf die Größe der Anwendung auswirken. true Standardmäßig mit PublishAot; es ist möglicherweise nicht möglich, einige Anwendungen mit dieser Eigenschaft falsenativ zu kompilieren.
UseSystemResourceKeys Wenn diese Einstellung auf true" festgelegt ist , werden Ausnahmemeldungen für System.* Assemblys entfernt. Wenn eine Ausnahme aus einer System.* Assembly ausgelöst wird, ist die Nachricht eine vereinfachte Ressourcen-ID anstelle der vollständigen Nachricht.
XmlResolverIsNetworkingEnabledByDefault (.NET 8+) Wenn diese Einstellung festgelegt falseist, wird die Unterstützung für das Auflösen von NICHT-Datei-URLs in System.Xmlentfernt. Es wird nur die Auflösung des Dateisystems unterstützt.

Diese Eigenschaften bewirken, dass der zugehörige Code gekürzt wird. Außerdem werden Features über die Datei runtimeconfig deaktiviert. Weitere Informationen zu diesen Eigenschaften einschließlich der entsprechenden runtimeconfig-Optionen finden Sie unter Featureoptionen. Einige SDKs weisen möglicherweise Standardwerte für diese Eigenschaften auf.

Bei der Kürzung deaktivierte Frameworkfeatures

Die folgenden Features sind mit dem Kürzen nicht kompatibel, da code erforderlich ist, auf den nicht statisch verwiesen wird. Diese Features sind in gekürzten Apps standardmäßig deaktiviert.

Warnung

Aktivieren Sie diese Features auf eigene Gefahr. Es ist wahrscheinlich, dass dadurch gekürzte Apps ohne zusätzlichen Aufwand zur Beibehaltung des dynamisch referenzierten Codes unterbrochen werden.

  • <BuiltInComInteropSupport>

    Die integrierte COM-Unterstützung ist deaktiviert.

  • <CustomResourceTypesSupport>

    Die Verwendung von benutzerdefinierten Ressourcentypen wird nicht unterstützt. Ressourcenmanager-Codepfade, die Spiegelung für benutzerdefinierte Ressourcentypen verwenden, werden gekürzt.

  • <EnableCppCLIHostActivation>

    Die C++/CLI-Hostaktivierung ist deaktiviert.

  • <EnableUnsafeBinaryFormatterInDesigntimeLicenseContextSerialization>

    Die Verwendung der DesigntimeLicenseContextSerializer-Serialisierung durch BinaryFormatter ist deaktiviert.

  • <StartupHookSupport>

    Das Ausführen von Code vor dem Main Ausführen DOTNET_STARTUP_HOOKS von Code wird nicht unterstützt. Weitere Informationen finden Sie unter Hoststarthook.