Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
I progetti che impostano <PublishTrimmed>true</PublishTrimmed>, <IsTrimmable>true</IsTrimmable> o <EnableTrimAnalyzer>true</EnableTrimAnalyzer> con una versione TargetFramework qualsiasi di .NET Standard o .NET Framework generano un avviso o un errore perché il taglio non è supportato per questi framework di destinazione.
Comportamento precedente
In precedenza, se usate in un progetto .NET Standard o .NET Framework, queste impostazioni si comportavano nel modo seguente:
-
<PublishTrimmed>true</PublishTrimmed>non aveva alcun effetto. -
<IsTrimmable>true</IsTrimmable>incorporava un attributo[assembly: AssemblyMetadata("IsTrimmable", "true")]a livello di assembly nell'assembly di output. Tale attributo optava per il trimming dell'assembly quando veniva usato in un'app tagliata (anche in un'app che usa<TrimMode>partial</TrimMode>). -
<EnableTrimAnalyzer>true</EnableTrimAnalyzer>abilitava dell'analisi di taglio per la libreria, usando gli assembly di riferimento .NET Standard o .NET Framework corrispondenti alTargetFrameworkdella libreria, anche se questi assembly di riferimento non venivano annotati per il taglio.
Nuovo comportamento
A partire dall’SDK .NET 8, in un progetto destinato a .NET Standard o .NET Framework:
-
<PublishTrimmed>genera un errore che indica che questa impostazione non è supportata dal framework di destinazione. -
<IsTrimmable>e<EnableTrimAnalyzer>generano un avviso che indica che<IsTrimmable>non è supportato dal framework di destinazione. In caso contrario, queste impostazioni non hanno alcun effetto sull'output di compilazione.
Versione di introduzione
.NET 8 RC 1
Tipo di modifica che causa un'interruzione
Questa è una modifica funzionale.
Motivo della modifica
Consentire l'uso di <PublishTrimmed> in un progetto .NET Standard o .NET Framework poteva dare la falsa impressione che questa impostazione tagliasse l'output, quando in realtà non aveva alcun effetto.
Consentire l'uso di <IsTrimmable> o di <EnableTrimAnalyzer> in un progetto .NET Standard o .NET Framework voleva dire che era facile per gli autori delle librerie acconsentire esplicitamente al trimming senza essere avvisati delle relative incompatibilità. Poiché gli assembly di riferimento .NET Standard e .NET Framework non sono annotati per il taglio, non sono c’erano avvisi sugli usi delle API del framework incompatibili con il taglio.
Azione consigliata
Evitare di impostare <PublishTrimmed> nei progetti destinati a .NET Standard o .NET Framework. Evitare anche di impostare <PublishAot>, che implica l'impostazione precedente.
Evitare di impostare <IsTrimmable> o <EnableTrimAnalyzer> in librerie destinate a .NET Standard o .NET Framework. Evitare anche di impostare <IsAotCompatible>, che implica le impostazioni precedenti. Al contrario, si può utilizzare una libreria multi-target per includere la versione più recente di TargetFramework e abilitare <IsTrimmable> solo per i framework di destinazione supportati. L'impostazione di <IsTrimmable> eseguirà la versione più recente dell'analizzatore di taglio usando annotazioni sulla compatibilità di taglio dalla versione più recente del framework.
Ad esempio, usare queste impostazioni multi target per includere net8.0 e impostare <IsTrimmable> solo per questo framework di destinazione. Questa logica usa IsTargetFrameworkCompatible in modo che si applichi a tutti i framework compatibili con net6.0, quando il trimming è stato ufficialmente supportato. In questo modo, la condizione non deve essere aggiornata quando si aggiungono nuovi framework di destinazione.
<PropertyGroup>
<TargetFrameworks>netstandard2.1;net8.0</TargetFrameworks>
<IsTrimmable Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net6.0'))">true</IsTrimmable>
</PropertyGroup>