Condividi tramite


'dotnet publish' usa la configurazione Release

Il dotnet publish comando usa ora la Release configurazione anziché la Debug configurazione per impostazione predefinita se il framework di destinazione è .NET 8 o versione successiva.

Comportamento precedente

In precedenza, dotnet publish usava la Debug configurazione a meno che la configurazione non sia stata specificata in modo esplicito o PublishRelease sia stata impostata su true.

La PublishRelease proprietà è stata aggiunta in .NET 7 come strada da intraprendere rispetto a questa modifica importante. In precedenza, è possibile impostare la DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS variabile di ambiente da usare PublishRelease in un progetto che faceva parte di una soluzione di Visual Studio.

Nuovo comportamento

Se si sviluppa con .NET 8 SDK o una versione successiva, dotnet publish usa la Release configurazione per impostazione predefinita per i progetti i cui TargetFramework valori sono impostati su net8.0 o versione successiva. Se disponi di uno script CI/CD, dei test o del codice in cui hai inserito manualmente Debug in un percorso di output, questa modifica potrebbe interrompere il tuo flusso di lavoro.

Se il progetto è destinato a più versioni, il nuovo comportamento si applica solo se si specifica un framework di destinazione di .NET 8 o versione successiva quando si pubblica (ad esempio, usando dotnet publish -f net8.0).

Per i progetti in una soluzione:

  • dotnet publish può pubblicare tutti i progetti in una soluzione di Visual Studio se viene fornito un file di soluzione. Per i progetti di soluzione destinati a .NET 8 o versione successiva, il valore di PublishRelease viene impostato in modo implicito su true se non è definito. Tuttavia, per dotnet publish determinare la configurazione corretta da usare per la soluzione, tutti i progetti nella soluzione devono concordare il relativo valore di PublishRelease. Se un progetto precedente nella soluzione è PublishRelease impostato su false, è necessario impostare in modo esplicito la proprietà su false per tutti i nuovi progetti .NET 8+.

  • Questa modifica può causare un regresso delle dotnet publish prestazioni, in particolare per le soluzioni che contengono molti progetti. Per risolvere questo problema, è stata introdotta una nuova variabile DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS di ambiente.

  • La DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS variabile di ambiente non viene più riconosciuta.

Versione introdotta

.NET 8 Preview 1

Tipo di cambiamento che interrompe la compatibilità

Questa modifica può influire sulla compatibilità delle origini ed è anche una modifica comportamentale.

Motivo della modifica

Nella maggior parte dei casi quando si pubblica, si vuole ottimizzare il codice e mantenere l'app più piccola escludendo le informazioni di debug. I clienti hanno chiesto che Release sia la configurazione predefinita per publish da molto tempo. Visual Studio ha anche avuto questo comportamento per molti anni.

La DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS variabile di ambiente è stata rimossa perché il comportamento abilitato è ora il comportamento predefinito e il controllo granulare non è più necessario.

  • Per disabilitare completamente il nuovo comportamento, è possibile impostare la DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE variabile di ambiente su true (o su qualsiasi altro valore). Questa variabile influisce sia su dotnet publish che su dotnet pack.

  • Per specificare esplicitamente la configurazione per la Debug pubblicazione, utilizzare l'opzione -c o --configuration con dotnet publish.

  • Se la pipeline CI/CD è interrotta a causa di percorsi di output hardcoded, aggiornare i percorsi in Release anziché Debug, disabilitare il nuovo comportamento utilizzando la variabile di ambiente DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE, oppure specificare che la configurazione Debug deve essere usata.

  • Se pubblichi una soluzione ed è interrotta, puoi esplicitamente impostare PublishRelease su true (o false per ritornare al comportamento precedente).

    <PropertyGroup>
      <PublishRelease>true</PublishRelease>
    </PropertyGroup>
    

    In alternativa, è possibile specificare la proprietà in un file Directory.Build.Props . Tuttavia, se la si imposta false in questo file, sarà comunque necessario impostare in modo esplicito la proprietà su false nei progetti .NET 8+ nella soluzione. Analogamente, se alcuni progetti impostano in modo esplicito un valore diverso dal valore nel file Directory.Build.Props , la pubblicazione avrà esito negativo.

  • Se si pubblica una soluzione e le prestazioni sono regredite, è possibile impostare la DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS variabile di ambiente su true (o su qualsiasi altro valore) per rimuovere la regressione. Tuttavia, se si imposta questa variabile e la soluzione contiene un progetto .NET 8+ e un progetto destinato a .NET 7 o versioni precedenti, la pubblicazione avrà esito negativo finché tutti i progetti non definiscono PublishRelease. Questa variabile influisce sia su dotnet publish che su dotnet pack.

Vedere anche