Condividi tramite


App specifiche del runtime non più autonome

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

Si tratta di una modifica dirompente nelle situazioni seguenti:

  • Se hai distribuito, distribuito o pubblicato la tua app e non hai aggiunto esplicitamente la proprietà SelfContained, ma non è necessario installare il runtime .NET sul computer per farla funzionare. In questo caso, potresti aver fatto affidamento sul comportamento precedente per produrre automaticamente un'app autonoma.
  • Se si fa affidamento sullo strumento IL Link. In questo caso, eseguire i passaggi descritti in Azione consigliata per usare di nuovo il collegamento IL.

Comportamento precedente

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

In aggiunta:

  • Se PublishSelfContained non è stato impostato esplicitamente su false, le proprietà di pubblicazione PublishSingleFile e PublishAot implicavano un RuntimeIdentifier e pertanto SelfContained (se non era specificato) durante le operazioni, tra cui dotnet build, dotnet restore e dotnet publish.
  • La PublishTrimmed proprietà non implicava SelfContained.
  • La proprietà PublishReadyToRun ha implicato SelfContained se SelfContained non fosse specificato.

Nuovo comportamento

A partire da .NET 8, per le app destinate a .NET 8 o versione successiva, RuntimeIdentifier non implica SelfContained più 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à PublishSingleFile di pubblicazione e PublishAot ora implicano SelfContained (se non è specificato) solo durante dotnet publish (ovvero non per dotnet build o dotnet restore).
  • Ora la PublishTrimmed proprietà implica anche SelfContained durante dotnet publish.
  • La PublishReadyToRun proprietà non implica SelfContained più se il progetto è destinato a .NET 8 o versione successiva.

Annotazioni

Se si pubblica usando msbuild /t:Publish e si vuole che l'app sia autonoma, è necessario specificare SelfContainedin modo esplicito , anche se il progetto ha una delle proprietà di pubblicazione elencate.

Versione introdotta

.NET 8 Preview 5

Tipo di cambiamento che interrompe la compatibilità

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 up-to-date. Le app con una copia personalizzata del runtime non ottengono gli aggiornamenti della 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 ha senso che nessun RID sia predefinito su FDD e RID sia predefinito su SCD. Questo comportamento è spesso confuso per gli utenti.

.NET 6 ha avvisato gli utenti di questa modifica di rilievo con l'avviso seguente:

avviso NETSDK1179: è necessario utilizzare una delle opzioni '--self-contained' o '--no-self-contained' quando si usa '--runtime'.

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

  • Se si usa .NET 7 o una versione precedente e si è basato sul comportamento precedente in cui SelfContained è stato dedotto, verrà visualizzato 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, provare 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 come argomento della riga di comando, dotnet publish --self-containedad esempio .

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

Impostare la proprietà del file di progetto

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

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

Vedere anche