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.
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 sufalse
, le proprietà di pubblicazionePublishSingleFile
ePublishAot
implicavano unRuntimeIdentifier
e pertantoSelfContained
(se non era specificato) durante le operazioni, tra cuidotnet build
,dotnet restore
edotnet publish
. - La
PublishTrimmed
proprietà non implicavaSelfContained
. - La proprietà
PublishReadyToRun
ha implicatoSelfContained
seSelfContained
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 sufalse
, le proprietàPublishSingleFile
di pubblicazione ePublishAot
ora implicanoSelfContained
(se non è specificato) solo durantedotnet publish
(ovvero non perdotnet build
odotnet restore
). - Ora la
PublishTrimmed
proprietà implica ancheSelfContained
durantedotnet publish
. - La
PublishReadyToRun
proprietà non implicaSelfContained
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 SelfContained
in 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.
Azione consigliata
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-contained
ad esempio .Se si usa .NET 8 e si vuole mantenere il comportamento precedente, impostare
SelfContained
sutrue
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>