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 sufalse
, le proprietà di pubblicazionePublishSingleFile
ePublishAot
implicavanoRuntimeIdentifier
e pertantoSelfContained
(se non era specificato) durante le operazioni, tra cuidotnet build
,dotnet restore
edotnet publish
. - La proprietà
PublishTrimmed
non implicavaSelfContained
. - La proprietà
PublishReadyToRun
implicavaSelfContained
seSelfContained
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 sufalse
, le proprietà di pubblicazionePublishSingleFile
ePublishAot
ora implicanoSelfContained
(se non è specificato) solo durantedotnet publish
(ovvero non perdotnet build
odotnet restore
). - Anche la proprietà
PublishTrimmed
ora implicaSelfContained
durantedotnet 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.
Azione consigliata
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
sutrue
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>