Condividi tramite


Avanzamento del runtime per la distribuzione autonoma

Le distribuzioni di applicazioni autonome di .NET Core includono sia le librerie .NET Core che il runtime di .NET Core. A partire da .NET Core 2.1 SDK (versione 2.1.300), una distribuzione di applicazioni autonome pubblica il runtime di patch più elevato nel computer. Per impostazione predefinita, dotnet publish per una distribuzione autonoma seleziona la versione più recente installata come parte dell'SDK nel computer di pubblicazione. In questo modo l'applicazione distribuita può essere eseguita con correzioni di sicurezza (e altre correzioni) disponibili durante publish. L'applicazione deve essere ripubblicata per ottenere una nuova patch. Le applicazioni autonome vengono create specificando -r <RID> nel dotnet publish comando o specificando l'identificatore di runtime (RID) nel file di progetto (csproj/vbproj) o nella riga di comando.

Panoramica dell'avanzamento della versione patch

restoree buildpublish sono dotnet comandi che possono essere eseguiti separatamente. La scelta del runtime fa parte dell'operazione restore , non publish o build. Se si chiama publish, verrà scelta la versione più recente della patch. Se chiami publish con l'argomento --no-restore, è possibile che non venga ottenuta la versione della patch desiderata perché un'esecuzione precedente di restore potrebbe non essere avvenuta secondo il nuovo criterio di pubblicazione dell'applicazione autonoma. In questo caso, viene generato un errore di compilazione con testo simile al seguente:

"Il progetto è stato ripristinato usando Microsoft.NETCore.App versione 2.0.0, ma con le impostazioni correnti, la versione 2.0.6 verrebbe usata. Per risolvere questo problema, assicurarsi che vengano usate le stesse impostazioni per il ripristino e per le operazioni successive, ad esempio la compilazione o la pubblicazione. In genere questo problema può verificarsi se la proprietà RuntimeIdentifier viene impostata durante la compilazione o la pubblicazione, ma non durante il ripristino".

Annotazioni

restore e build possono essere eseguiti in modo implicito come parte di un altro comando, ad esempio publish. Quando vengono eseguiti in modo implicito come parte di un altro comando, vengono forniti con contesto aggiuntivo in modo che vengano prodotti gli artefatti corretti. Quando si publish usa un runtime ( ad esempio , dotnet publish -r linux-x64), i pacchetti impliciti restore vengono ripristinati per il runtime linux-x64. Se si chiama restore in modo esplicito, non ripristina i pacchetti di runtime per impostazione predefinita, perché non ha tale contesto.

Come evitare il ripristino durante la pubblicazione

L'esecuzione restore come parte dell'operazione publish può essere indesiderata per lo scenario in uso. Per evitare restore durante la creazione di publish di applicazioni indipendenti, effettuare le seguenti operazioni:

  • Impostare la RuntimeIdentifiers proprietà su un elenco delimitato da punto e virgola di tutti i RID da pubblicare.
  • Impostare la proprietà TargetLatestRuntimePatch su true.

Argomento no-restore con opzioni di pubblicazione dotnet

Se si desidera creare applicazioni autonome e applicazioni dipendenti dal framework con lo stesso file di progetto e si vuole usare l'argomento --no-restore con dotnet publish, scegliere una delle opzioni seguenti:

  1. Preferisce il comportamento dipendente dal framework. Se l'applicazione dipende dal framework, si tratta del comportamento predefinito. Se l'applicazione è autonoma e può usare un runtime locale non patchato 2.1.0, impostare TargetLatestRuntimePatch su false nel file di progetto.

  2. Preferisce il comportamento autonomo. Se l'applicazione è autonoma, si tratta del comportamento predefinito. Se l'applicazione è dipendente dal framework e richiede l'installazione della patch più recente, impostare TargetLatestRuntimePatch su true nel file di progetto.

  3. Assumere il controllo esplicito della versione del framework di runtime impostando RuntimeFrameworkVersion la versione della patch specifica nel file di progetto.