Condividi tramite


App specifiche del runtime non più autonome

Le app specifiche del runtime o le app .NET con un RuntimeIdentifier, non sono più autonome per impostazione predefinita. Sono invece dipendenti dal framework per impostazione predefinita.

Si tratta di una modifica che causa un'interruzione nelle situazioni seguenti:

  • Se hai implementato, distribuito o pubblicato l'app e non hai aggiunto in modo esplicito la proprietà SelfContained, ma non è stato nemmeno richiesto che il runtime .NET fosse installato nel computer per il funzionamento. In questo caso, potresti aver fatto affidamento sul comportamento precedente per produrre un'app autonoma per impostazione predefinita.
  • Se ti basi sullo strumento IL Link. In questo caso, eseguire la procedura descritta in Azione consigliata per usare di nuovo IL Link.

Comportamento precedente

In precedenza, se era specificato un identificatore di runtime (RID) (tramite RuntimeIdentifier), l'app era pubblicata come autonoma, anche se SelfContained non era specificata in modo esplicito.

In aggiunta:

  • Se PublishSelfContained non era impostata in modo esplicito su false, le proprietà di pubblicazione PublishSingleFile e PublishAot implicavano RuntimeIdentifier e pertanto SelfContained (se non era specificato) durante le operazioni, tra cui dotnet build, dotnet restore e dotnet publish.
  • La proprietà PublishTrimmed non implicava SelfContained.
  • La proprietà PublishReadyToRun implicava SelfContained se SelfContained non era specificato.

Nuovo comportamento

A partire da .NET 8, per le app destinate a .NET 8 o versione successiva, RuntimeIdentifier non implica più SelfContained per impostazione predefinita. Le app che specificano un identificatore di runtime dipendono invece dal runtime .NET per impostazione predefinita (dipendente dal framework). Le app destinate a .NET 7 o versioni precedenti non sono interessate.

In aggiunta:

  • Se PublishSelfContained non è impostato in modo esplicito su false, le proprietà di pubblicazione PublishSingleFile e PublishAot ora implicano SelfContained (se non è specificato) solo durante dotnet publish (ovvero non per dotnet build o dotnet restore).
  • Anche la proprietà PublishTrimmed ora implica SelfContained durante dotnet publish.
  • La proprietà PublishReadyToRun non implica più SelfContained se il progetto è destinato a .NET 8 o versione successiva.

Nota

Se pubblichi usando msbuild /t:Publish evuoi che l'app sia autonoma, è necessario specificare SelfContained in modo esplicito, anche se il progetto ha una delle proprietà di pubblicazione elencate.

Versione introdotta

.NET 8 anteprima 5

Tipo di modifica che causa un'interruzione

Questa modifica può influire sulla compatibilità dell'origine e sulla compatibilità binaria.

Motivo della modifica

  • Il nuovo comportamento di .NET SDK è allineato al comportamento di Visual Studio.
  • Le app dipendenti dal framework sono più piccole per impostazione predefinita, perché non sono presenti copie di .NET archiviate in ogni app.
  • Quando .NET viene gestito all'esterno dell'app, ovvero per le distribuzioni dipendenti dal framework, .NET rimane più sicuro e aggiornato. Le app con la propria copia del runtime non ottengono gli aggiornamenti di sicurezza. Questa modifica rende più app dipendenti dal framework per impostazione predefinita.
  • Idealmente, le opzioni della riga di comando sono ortogonali. In questo caso, gli strumenti supportano sia la distribuzione autonoma (SCD) specifica del RID che la distribuzione dipendente dal framework (FDD) specifica del RID. Quindi non aveva senso che senza RID venisse usata una distribuzione dipendente dal framework (FDD) per impostazione predefinita e con RID venisse usata una distribuzione autonoma (SCD) per impostazione predefinita. Questo comportamento spesso creava confusione negli utenti.

.NET 6 ha avvisato gli utenti di questa modifica che causa un'interruzione con l'avviso seguente:

avviso NETSDK1179: quando si usa "--runtime" o "--no-self-contained" sono necessarie una delle opzioni '--runtime'.

Ora che i clienti hanno avuto il tempo di aggiungere SelfContained in modo esplicito, è possibile introdurre l'interruzione.

  • Se usi .NET 7 o una versione precedente e ti sei basato sul comportamento precedente per cui SelfContained veniva dedotto, vedrai questo avviso:

    Per i progetti con TargetFrameworks >= 8.0, RuntimeIdentifier non fornisce più automaticamente un'app SelfContained. Per continuare a creare un'app indipendente di .NET Framework dopo l'aggiornamento alla versione 8.0, prova a impostare SelfContained in modo esplicito.

    Seguire le indicazioni dell'avviso e dichiarare l'app come autonoma. È possibile eseguire questa operazione nel file di progetto o tramite un argomento della riga di comando, ad esempio dotnet publish --self-contained.

  • Se si usa .NET 8 e si vuole mantenere il comportamento precedente, impostare SelfContained su true nello stesso modo descritto in precedenza.

Impostare la proprietà del file di progetto

SelfContained è una proprietà di MSBuild che è possibile inserire nel file di progetto, ovvero un file con estensione csproj, vbproj o fsproj. Impostare la proprietà nel modo seguente:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    ...
    <SelfContained>true</SelfContained>
  </PropertyGroup>
</Project>

Vedi anche