Condividi tramite


Modifiche che causano un'interruzione di MSBuild in .NET Core 2.1 - 3.1

Le seguenti modifiche che causano un'interruzione sono documentate in questa pagina:

Modifica Versione introdotta
Le compilazioni in fase di progettazione restituiscono solo riferimenti ai pacchetti di primo livello 3.1
Modifica del nome file manifesto della risorsa 3,0
Strumenti di progetto ora inclusi nell'SDK 2.1

.NET Core 3.1

Le compilazioni in fase di progettazione restituiscono solo riferimenti ai pacchetti di primo livello

A partire da .NET Core SDK 3.1.400, solo i riferimenti di pacchetto di primo livello vengono restituiti dalla destinazione RunResolvePackageDependencies.

Versione introdotta

.NET Core SDK 3.1.400

Descrizione delle modifiche

Nelle versioni precedenti di .NET Core SDK, la destinazione RunResolvePackageDependencies ha creato gli elementi MSBuild seguenti che contengono informazioni dal file di asset NuGet:

  • PackageDefinitions
  • PackageDependencies
  • TargetDefinitions
  • FileDefinitions
  • FileDependencies

Questi dati vengono usati da Visual Studio per popolare il nodo Dipendenze in Esplora soluzioni. Tuttavia, la quantità di dati potrebbe essere elevata e i dati non sono necessari a meno che il nodo Dipendenze non venga espanso.

A partire da .NET Core SDK versione 3.1.400, la maggior parte di questi elementi non viene generata per impostazione predefinita. Vengono restituiti solo gli elementi di tipo Package. Se Visual Studio richiede che gli elementi popolano il nodo Dipendenze, legge le informazioni direttamente dal file di asset.

Motivo della modifica

Questa modifica è stata introdotta per migliorare le prestazioni di caricamento della soluzione all'interno di Visual Studio. In precedenza, tutti i riferimenti ai pacchetti venivano caricati, comportando il caricamento di molti riferimenti mai visualizzati dalla maggior parte degli utenti.

Se disponi di una logica MSBuild che dipende da questi elementi creati, imposta la proprietà EmitLegacyAssetsFileItems su true nel file di progetto. Questa impostazione abilita il comportamento precedente in cui vengono creati tutti gli elementi.

Category

MSBuild

API interessate

N/D


.NET Core 3.0

Modifica del nome file manifesto della risorsa

A partire da .NET Core 3.0, nel caso predefinito MSBuild genera un nome file manifesto diverso per i file di risorse.

Versione di introduzione

3,0

Descrizione delle modifiche

Prima di .NET Core 3.0, se non venivano specificati metadati per LogicalName, ManifestResourceName o DependentUpon per un elemento EmbeddedResource nel file di progetto, MSBuild generava un nome file manifesto nel modello <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources. Se RootNamespace non è definito nel file di progetto, per impostazione predefinita viene impostato sul nome del progetto. Ad esempio, il nome del manifesto generato per un file di risorse denominato Form1.resx nella directory del progetto radice era MyProject.Form1.resources.

A partire da .NET Core 3.0, se un file di risorse condivide il percorso con un file di origine con lo stesso nome, ad esempio, Form1.resx e Form1.cs, MSBuild usa le informazioni sul tipo dal file di origine per generare il nome file manifesto nel modello <Namespace>.<ClassName>.resources. Lo spazio dei nomi e il nome della classe vengono estratti dal primo tipo nel file di origine con percorso condiviso. Ad esempio, il nome del manifesto generato per un file di risorse denominato Form1.resx che condivide il percorso con un file di origine denominato Form1.cs è MyNamespace.Form1.resources. L'aspetto principale da notare è che la prima parte del nome file è diversa dalle versioni precedenti di .NET Core, ovvero MyNamespace anziché MyProject.

Nota

Se nel file di progetto sono stati specificati metadati per LogicalName, ManifestResourceName o DependentUpon in un elemento EmbeddedResource, questa modifica non influisce sul file di risorse.

Questa modifica che causa un'interruzione è stata introdotta con l'aggiunta della proprietà EmbeddedResourceUseDependentUponConvention ai progetti .NET Core. Per impostazione predefinita, i file di risorse non sono elencati in modo esplicito in un file di progetto di .NET Core, pertanto non hanno metadati DependentUpon per specificare come assegnare un nome al file con estensione resources generato. Quando EmbeddedResourceUseDependentUponConvention è impostato su true, ovvero l'impostazione predefinita, MSBuild cerca un file di origine con percorso condiviso ed estrae uno spazio dei nomi e un nome di classe da tale file. Se si imposta EmbeddedResourceUseDependentUponConvention su false, MSBuild genera il nome del manifesto in base al comportamento precedente, che combina RootNamespace e il percorso del file relativo.

Nella maggior parte dei casi non è necessaria alcuna azione da parte dello sviluppatore e l'app dovrebbe continuare a funzionare. Se tuttavia questa modifica causa interruzioni nell'app, è possibile:

  • Modificare il codice in modo da prevedere il nuovo nome del manifesto.

  • Rifiutare esplicitamente la nuova convenzione di denominazione impostando EmbeddedResourceUseDependentUponConvention su false nel file di progetto.

    <PropertyGroup>
      <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention>
    </PropertyGroup>
    

Category

MSBuild

API interessate

N/D


.NET Core 2.1

Strumenti di progetto ora inclusi nell'SDK

.NET Core 2.1 SDK include ora strumenti comuni dell'interfaccia della riga di comando e non è più necessario fare riferimento a questi strumenti dal progetto.

Descrizione delle modifiche

In .NET Core 2.0 i progetti fanno riferimento a strumenti .NET esterni con l'impostazione del progetto <DotNetCliToolReference>. In .NET Core 2.1 alcuni di questi strumenti sono inclusi in .NET Core SDK e l'impostazione non è più necessaria. Se si includono riferimenti a questi strumenti nel progetto, verrà visualizzato un errore simile al seguente: lo strumento "Microsoft.EntityFrameworkCore.Tools.DotNet" è ora incluso in .NET Core SDK.

Strumenti ora inclusi in .NET Core 2.1 SDK:

Valore <DotNetCliToolReference> Tool
Microsoft.DotNet.Watcher.Tools dotnet-watch
Microsoft.Extensions.SecretManager.Tools dotnet-user-secrets
Microsoft.Extensions.Caching.SqlConfig.Tools dotnet-sql-cache
Microsoft.EntityFrameworkCore.Tools.DotNet dotnet-ef

Versione introdotta

.NET Core SDK 2.1.300

Rimuovi l'impostazione <DotNetCliToolReference> dal progetto.

Category

MSBuild

API interessate

N/D