Megosztás a következőn keresztül:


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 publishaz 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 partialmó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 PublishTrimmedis 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 NoWarna , 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 PackageReferenceadott 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 DebuggerSupporthaszná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 falsenem 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 falseEventSource-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, trueeltá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>

    DesigntimeLicenseContextSerializerBinaryFormatter 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.