Vágási beállítások
A cikkben ismertetett MSBuild tulajdonságok és elemek befolyásolják a levágott, önálló üzemelő példányok viselkedését. Néhány lehetőség említést tesz ILLink
, amely a vágást megvalósító mögöttes eszköz neve. A mögöttes eszközről további információt a Trimmer dokumentációjában talál.
A vágást a PublishTrimmed
.NET Core 3.0-ban vezettük be. A többi lehetőség a .NET 5-ös és újabb verzióiban érhető el.
Vágás engedélyezése
<PublishTrimmed>true</PublishTrimmed>
A közzététel során engedélyezze a vágást. Ez a beállítás kikapcsolja a nem kompatibilis vágási funkciókat is, és lehetővé teszi a vágáselemzést a buildelés során. A .NET 8 és újabb alkalmazásokban ez a beállítás lehetővé teszi a konfigurációs kötést és a delegált forrásgenerátorok kérését is.
Feljegyzés
Ha a parancssorból engedélyezi a vágást, a hibakeresési élmény eltérő lesz, és további hibák léphetnek fel a végtermékben.
Helyezze ezt a beállítást a projektfájlba, és győződjön meg arról, hogy a beállítás nem csak dotnet publish
az adott időszakban dotnet build
érvényes.
Ez a beállítás alapértelmezés szerint lehetővé teszi az összes szerelvény vágását és vágását. A .NET 6-ban alapértelmezés szerint csak azok a szerelvények lettek levágva, amelyek a vágást (a beállított projektekben hozzáadva) adták [AssemblyMetadata("IsTrimmable", "True")]
hozzá <IsTrimmable>true</IsTrimmable>
. Az előző viselkedéshez a következővel <TrimMode>partial</TrimMode>
térhet vissza: .
Ez a beállítás lehetővé teszi a Vágáskompatibilitási Roslyn-elemzőt , és letiltja a vágással nem kompatibilis funkciókat.
Részletesség vágása
TrimMode
A tulajdonság használatával a vágás részletességét a következőre állíthatja: vagy partial
full
. A konzolalkalmazások (és a .NET 8-tól kezdve a Webes SDK-alkalmazások) alapértelmezett beállítása a következő full
:
<TrimMode>full</TrimMode>
Ha csak a vágást választó szerelvényeket szeretné levágni, állítsa a tulajdonságot a következőre partial
:
<TrimMode>partial</TrimMode>
Ha a vágási módot partial
módosítja, az egyes szerelvényeket az MSBuild elem használatával <TrimmableAssembly>
vághatja le.
<ItemGroup>
<TrimmableAssembly Include="MyAssembly" />
</ItemGroup>
Ez egyenértékű a szerelvény létrehozásakor megadott beállítással [AssemblyMetadata("IsTrimmable", "True")]
.
Gyökérszerelvények
Ha egy szerelvény nincs levágva, a rendszer "gyökerezettnek" tekinti, ami azt jelenti, hogy a szerelvény és az összes statikusan értelmezett függősége megmarad. A további szerelvények név szerint "gyökereznek" (bővítmény .dll
nélkül):
<ItemGroup>
<TrimmerRootAssembly Include="MyAssembly" />
</ItemGroup>
Gyökérleírók
Az elemzési gyökerek megadásának másik módja egy olyan XML-fájl használata, amely a vágóleíró formátumát használja. Ez lehetővé teszi, hogy egy teljes szerelvény helyett konkrét tagokat gyökereztetsen.
<ItemGroup>
<TrimmerRootDescriptor Include="MyRoots.xml" />
</ItemGroup>
Előfordulhat például, MyRoots.xml
hogy egy adott metódust gyökereztet, amelyet az alkalmazás dinamikusan elér:
<linker>
<assembly fullname="MyAssembly">
<type fullname="MyAssembly.MyClass">
<method name="DynamicallyAccessedMethod" />
</type>
</assembly>
</linker>
Elemzési figyelmeztetések
<SuppressTrimAnalysisWarnings>false</SuppressTrimAnalysisWarnings>
Vágáselemzési figyelmeztetések engedélyezése.
A vágás eltávolítja a statikusan nem elérhető IL-t. A tükrözést vagy más dinamikus függőségeket létrehozó mintákat használó alkalmazások vágással megszakadhatnak. Az ilyen mintákra való figyelmeztetéshez állítsa be <SuppressTrimAnalysisWarnings>
a következőt false
: . Ez a beállítás a teljes alkalmazásra vonatkozó figyelmeztetéseket jelenít meg, beleértve a saját kódját, a kódtár kódját és a keretrendszer kódját.
Roslyn-elemző
A .NET 6+-ban való beállítás PublishTrimmed
lehetővé teszi a Roslyn-elemző használatát is, amely korlátozott számú elemzési figyelmeztetést jelenít meg. Az elemzőt a következőtől függetlenül PublishTrimmed
is engedélyezheti vagy tilthatja le.
<EnableTrimAnalyzer>true</EnableTrimAnalyzer>
Engedélyezze a Roslyn-elemzőt a vágáselemzési figyelmeztetések egy részhalmazához.
Figyelmeztetések mellőzése
Az egyes figyelmeztető kódok letilthatók az eszközlánc által betartott szokásos MSBuild tulajdonságok használatával, beleértve NoWarn
a , WarningsAsErrors
, WarningsNotAsErrors
és TreatWarningsAsErrors
. Van egy további lehetőség, amely egymástól függetlenül szabályozza az ILLink hibaalapú viselkedését:
<ILLinkTreatWarningsAsErrors>false</ILLinkTreatWarningsAsErrors>
Ne kezelje az ILLink-figyelmeztetéseket hibákként. Ez hasznos lehet, ha elkerüli, hogy a vágáselemzési figyelmeztetéseket hibákká alakítsa a fordítói figyelmeztetések globális hibaként való kezelésekor.
Részletes figyelmeztetések megjelenítése
A .NET 6+-ban a vágáselemzés legfeljebb egy figyelmeztetést eredményez minden egyes szerelvényhez, amely egy PackageReference
adott szerelvényből származik, ami azt jelzi, hogy a szerelvény belső elemei nem kompatibilisek a vágással. Az egyes szerelvényekre vonatkozó figyelmeztetéseket is megjelenítheti:
<TrimmerSingleWarn>false</TrimmerSingleWarn>
Az összes részletes figyelmeztetés megjelenítése ahelyett, hogy szerelvényenként egyetlen figyelmeztetésre összecsukja őket.
Szimbólumok eltávolítása
A szimbólumok általában a levágott szerelvényeknek megfelelően vannak levágva. Az összes szimbólumot is eltávolíthatja:
<TrimmerRemoveSymbols>true</TrimmerRemoveSymbols>
Távolítsa el a szimbólumokat a levágott alkalmazásból, beleértve a beágyazott PDF-fájlokat és a különálló PDB-fájlokat. Ez az alkalmazáskódra és a szimbólumokkal rendelkező függőségekre is vonatkozik.
Az SDK lehetővé teszi a hibakeresők támogatását is a tulajdonság DebuggerSupport
használatával. Ha a hibakereső támogatása le van tiltva, a vágás automatikusan eltávolítja a szimbólumokat (TrimmerRemoveSymbols
alapértelmezés szerint igaz).
A keretrendszertár funkcióinak vágása
A keretrendszer-kódtárak több funkcióterülete tartalmaz olyan trimmer-irányelveket, amelyek lehetővé teszik a letiltott funkciók kódjának eltávolítását.
MSBuild tulajdonság | Leírás |
---|---|
AutoreleasePoolSupport |
Ha be van false állítva, eltávolítja az autorelease-készleteket a támogatott platformokon létrehozó kódot. false A .NET SDK alapértelmezett értéke. |
DebuggerSupport |
Ha be van false állítva, eltávolítja a jobb hibakeresést lehetővé tevő kódot. Ez a beállítás a szimbólumokat is eltávolítja. |
EnableUnsafeBinaryFormatterSerialization |
Ha be van false állítva, eltávolítja a BinaryFormatter szerializálási támogatását. További információ: A BinaryFormatter szerializálási módszerei elavultak , és a bináris formázás beépített implementációja el lett távolítva, és mindig eldobható. |
EnableUnsafeUTF7Encoding |
Ha be van állítva, eltávolítja a false nem biztonságos UTF-7 kódolási kódot. További információt az UTF-7 kódútvonalak elavultak. |
EventSourceSupport |
Ha be van állítva, eltávolítja az false EventSource-hoz kapcsolódó kódot és logikát. |
HttpActivityPropagationSupport |
Ha be van false állítva, eltávolítja a diagnosztikai támogatással System.Net.Httpkapcsolatos kódot. |
InvariantGlobalization |
Ha be van true állítva, eltávolítja a globalizációra jellemző kódot és adatokat. További információ: Invariant mód. |
MetadataUpdaterSupport |
Ha be van false állítva, eltávolítja a metaadatok frissítését – a gyakori elérésű újratöltéssel kapcsolatos logikát. |
MetricsSupport |
Ha be van false állítva, eltávolítja a System.Diagnostics.Metrics rendszerállapot támogatását. |
StackTraceSupport (.NET 8+) |
Ha be van false állítva, eltávolítja a futtatókörnyezet által létrehozott veremkövetések (például Environment.StackTrace ) Exception.ToStringtámogatását. A verem nyomkövetési sztringjeiből eltávolított információk mennyisége más üzembe helyezési lehetőségektől függhet. Ez a beállítás nem befolyásolja a hibakeresők által létrehozott verem-nyomkövetéseket. |
UseNativeHttpHandler |
Ha be van true állítva, az Android és az iOS alapértelmezett platformmegvalósítását HttpMessageHandler használja, és eltávolítja a felügyelt implementációt. |
UseSystemResourceKeys |
Ha be van állítva, true eltávolítja a szerelvények kivételüzeneteit System.* . Ha egy szerelvény kivételt System.* küld, az üzenet a teljes üzenet helyett egy egyszerűsített erőforrás-azonosító. |
XmlResolverIsNetworkingEnabledByDefault (.NET 8+) |
Ha be van false állítva, eltávolítja a fájlon kívüli URL-címek feloldásának támogatását a fájlban System.Xml. Csak a fájlrendszer feloldása támogatott. |
Ezek a tulajdonságok miatt a kapcsolódó kód le lesz vágva, és a runtimeconfig fájlon keresztül is letiltja a funkciókat. További információ ezekről a tulajdonságokról, beleértve a megfelelő futtatókörnyezet-konfigurációs beállításokat, tekintse meg a funkciókapcsolókat. Előfordulhat, hogy egyes SDK-k alapértelmezett értékekkel rendelkeznek ezekhez a tulajdonságokhoz.
A keretrendszer funkciói le vannak tiltva a vágáskor
Az alábbi funkciók nem kompatibilisek a vágással, mert statikusan nem hivatkozott kódot igényelnek. Ezek a funkciók alapértelmezés szerint le vannak tiltva a levágott alkalmazásokban.
Figyelmeztetés
Ezeket a funkciókat saját felelősségére engedélyezheti. A levágott alkalmazásokat valószínűleg további munka nélkül törik meg a dinamikusan hivatkozott kód megőrzése érdekében.
<BuiltInComInteropSupport>
A beépített COM-támogatás le van tiltva.
<CustomResourceTypesSupport>
Az egyéni erőforrástípusok használata nem támogatott. Az egyéni erőforrástípusokhoz tükröződő ResourceManager-kód elérési útjai levágva lesznek.
<EnableCppCLIHostActivation>
A C++/CLI gazdagép aktiválása le van tiltva.
<EnableUnsafeBinaryFormatterInDesigntimeLicenseContextSerialization>
DesigntimeLicenseContextSerializer
BinaryFormatter
a szerializálás használata le van tiltva.<StartupHookSupport>
A kód korábbi
Main
DOTNET_STARTUP_HOOKS
futtatása nem támogatott. További információkért tekintse meg a gazdagép indítási horogát.