Bijsnijden kan niet worden gebruikt met .NET Standard of .NET Framework
Projecten die zijn ingesteld <PublishTrimmed>true</PublishTrimmed>
, <IsTrimmable>true</IsTrimmable>
of <EnableTrimAnalyzer>true</EnableTrimAnalyzer>
met een TargetFramework
versie van .NET Standard of .NET Framework, produceren een waarschuwing of fout omdat het bijsnijden niet wordt ondersteund voor deze doelframeworks.
Vorig gedrag
Voorheen, bij gebruik in een .NET Standard- of .NET Framework-project, gedragen deze instellingen zich als volgt:
<PublishTrimmed>true</PublishTrimmed>
had geen effect.<IsTrimmable>true</IsTrimmable>
een kenmerk[assembly: AssemblyMetadata("IsTrimmable", "true")]
op assemblyniveau ingesloten in de uitvoerassembly. Dat kenmerk heeft de assembly gekozen voor bijsnijden wanneer deze wordt gebruikt in een bijgesneden app (zelfs een app die gebruikmaakt van<TrimMode>partial</TrimMode>
).<EnableTrimAnalyzer>true</EnableTrimAnalyzer>
trimanalyse ingeschakeld voor de bibliotheek, met behulp van de .NET Standard- of .NET Framework-referentieassembly's die overeenkomen met de bibliotheek, ook al worden deze referentieassembly'sTargetFramework
niet geannoteerd voor bijsnijden.
Nieuw gedrag
Vanaf de .NET 8 SDK, in een project gericht op .NET Standard of .NET Framework:
<PublishTrimmed>
genereert een fout die aangeeft dat deze instelling niet wordt ondersteund voor het doelframework.<IsTrimmable>
en<EnableTrimAnalyzer>
een waarschuwing produceren die aangeeft dat<IsTrimmable>
dit niet wordt ondersteund voor het doelframework. Deze instellingen hebben anders geen effect op de build-uitvoer.
Versie geïntroduceerd
.NET 8 RC 1
Type wijziging die fouten veroorzaken
Deze wijziging is een gedragswijziging.
Reden voor wijziging
Als u het gebruik van <PublishTrimmed>
een .NET Standard- of .NET Framework-project toestaat, kan de valse indruk hebben gekregen dat deze instelling de uitvoer heeft ingekort, terwijl deze in feite geen effect had.
Het gebruik van <IsTrimmable>
of <EnableTrimAnalyzer>
in een .NET Standard- of .NET Framework-project betekende dat bibliotheekauteurs zich eenvoudig konden aanmelden voor bijsnijden, zonder dat ze gewaarschuwd worden over incompatibiliteit. Omdat de .NET Standard- en .NET Framework-referentieassembly's niet zijn geannoteerd voor bijsnijden, zijn er geen waarschuwingen over het gebruik van framework-API's die niet compatibel zijn met bijsnijden.
Aanbevolen actie
Vermijd het instellen <PublishTrimmed>
in projecten die gericht zijn op .NET Standard of .NET Framework. Vermijd ook instelling <PublishAot>
die de vorige instelling impliceert.
Vermijd het instellen <IsTrimmable>
of <EnableTrimAnalyzer>
in bibliotheken die zijn gericht op .NET Standard of .NET Framework. Vermijd ook het instellen <IsAotCompatible>
, wat de vorige instellingen impliceert. In plaats daarvan kunt u de bibliotheek met meerdere doelen opnemen TargetFramework
en alleen inschakelen <IsTrimmable>
voor de ondersteunde doelframeworks. Met de instelling <IsTrimmable>
wordt de nieuwste versie van de trim analyzer uitgevoerd met behulp van aantekeningen voor trimcompatibiliteit van de nieuwste versie van het framework.
Deze instellingen kunnen bijvoorbeeld meerdere doelen bevatten net8.0
en alleen worden ingesteld <IsTrimmable>
voor dit doelframework. Deze logica gebruikt IsTargetFrameworkCompatible
zodat deze van toepassing is op frameworks die compatibel zijn met net6.0
, wanneer het bijsnijden voor het eerst officieel werd ondersteund. Op deze manier hoeft de voorwaarde niet te worden bijgewerkt bij het toevoegen van nieuwe doelframeworks.
<PropertyGroup>
<TargetFrameworks>netstandard2.1;net8.0</TargetFrameworks>
<IsTrimmable Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net6.0'))">true</IsTrimmable>
</PropertyGroup>