Share via


Wijzigingen die fouten veroorzaken in MSBuild in .NET Core 2.1 - 3.1

De volgende belangrijke wijzigingen worden op deze pagina beschreven:

Wijziging die fouten veroorzaken Versie geïntroduceerd
Ontwerptijd-builds retourneren alleen pakketverwijzingen op het hoogste niveau 3.1
Naam van resourcemanifestbestand wijzigen 3,0
Projecthulpprogramma's nu opgenomen in SDK 2.1

.NET Core 3.1

Ontwerptijd-builds retourneren alleen pakketverwijzingen op het hoogste niveau

Vanaf .NET Core SDK 3.1.400 worden alleen pakketverwijzingen op het hoogste niveau geretourneerd door het RunResolvePackageDependencies doel.

Versie geïntroduceerd

.NET Core SDK 3.1.400

Wijzigingsbeschrijving

In eerdere versies van de .NET Core SDK heeft het RunResolvePackageDependencies doel de volgende MSBuild-items gemaakt die informatie bevatten uit het NuGet-assetsbestand:

  • PackageDefinitions
  • PackageDependencies
  • TargetDefinitions
  • FileDefinitions
  • FileDependencies

Deze gegevens worden door Visual Studio gebruikt om het knooppunt Afhankelijkheden in Solution Explorer te vullen. Het kan echter een grote hoeveelheid gegevens zijn en de gegevens zijn niet nodig, tenzij het knooppunt Afhankelijkheden wordt uitgevouwen.

Vanaf .NET Core SDK versie 3.1.400 worden de meeste van deze items niet standaard gegenereerd. Alleen items van het type Package worden geretourneerd. Als Visual Studio de items nodig heeft om het knooppunt Afhankelijkheden te vullen, worden de gegevens rechtstreeks uit het assetsbestand gelezen.

Reden voor wijziging

Deze wijziging is geïntroduceerd om de prestaties van oplossingsbelastingen in Visual Studio te verbeteren. Voorheen zouden alle pakketverwijzingen worden geladen, wat betrekking had op het laden van veel verwijzingen die de meeste gebruikers nooit zouden bekijken.

Als u MSBuild-logica hebt die afhankelijk is van deze items die worden gemaakt, stelt u de EmitLegacyAssetsFileItems eigenschap true in op in uw projectbestand. Met deze instelling wordt het vorige gedrag ingeschakeld waarbij alle items worden gemaakt.

Categorie

MSBuild

Betrokken API's

N.v.t.


.NET Core 3.0

Naam van resourcemanifestbestand wijzigen

Vanaf .NET Core 3.0 genereert MSBuild in het standaardscenario een andere manifestbestandsnaam voor resourcebestanden.

Versie geïntroduceerd

3,0

Wijzigingsbeschrijving

Vóór .NET Core 3.0, als er geen LogicalName, ManifestResourceNameof DependentUpon metagegevens zijn opgegeven voor een EmbeddedResource item in het projectbestand, heeft MSBuild een manifestbestandsnaam in het patroon <RootNamespace>.<ResourceFilePathFromProjectRoot>.resourcesgegenereerd. Als RootNamespace dit niet is gedefinieerd in het projectbestand, wordt deze standaard ingesteld op de projectnaam. De gegenereerde manifestnaam voor een resourcebestand met de naam Form1.resx in de hoofdprojectmap was bijvoorbeeld MyProject.Form1.resources.

Vanaf .NET Core 3.0 gebruikt MSBuild typegegevens uit het bronbestand om de manifestbestandsnaam in het patroon te genereren, te beginnen in .NET Core 3 Form1.cs.0.<Namespace>.<ClassName>.resources De naamruimte en klassenaam worden geëxtraheerd uit het eerste type in het bronbestand met een colocatie. Bijvoorbeeld de gegenereerde manifestnaam voor een resourcebestand met de naam Form1.resx dat zich bevindt op een bronbestand met de naam Form1.cs MyNamespace.Form1.resources is. Het belangrijkste om op te merken is dat het eerste deel van de bestandsnaam verschilt van eerdere versies van .NET Core (MyNamespace in plaats van MyProject).

Notitie

Als u , ManifestResourceNameof DependentUpon metagegevens hebt LogicalNameopgegeven voor een EmbeddedResource item in het projectbestand, heeft deze wijziging geen invloed op dat resourcebestand.

Deze belangrijke wijziging is geïntroduceerd met de toevoeging van de EmbeddedResourceUseDependentUponConvention eigenschap aan .NET Core-projecten. Resourcebestanden worden standaard niet expliciet vermeld in een .NET Core-projectbestand, dus ze hebben geen DependentUpon metagegevens om op te geven hoe het gegenereerde .resources-bestand een naam moet geven. Wanneer EmbeddedResourceUseDependentUponConvention dit is ingesteld trueop , wat de standaardinstelling is, zoekt MSBuild naar een bronbestand met eencolocated en extraheert een naamruimte en klassenaam uit dat bestand. Als u deze optie instelt EmbeddedResourceUseDependentUponConventionfalse, genereert MSBuild de manifestnaam op basis van het vorige gedrag, dat combineert RootNamespace en het relatieve bestandspad.

In de meeste gevallen is er geen actie vereist voor de ontwikkelaar en moet uw app blijven werken. Als deze wijziging uw app echter onderbreekt, kunt u het volgende doen:

  • Wijzig de code om de naam van het nieuwe manifest te verwachten.

  • Meld u af voor de nieuwe naamconventie door deze in te stellen EmbeddedResourceUseDependentUponConventionfalse in uw projectbestand.

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

Categorie

MSBuild

Betrokken API's

N.v.t.


.NET Core 2.1

Projecthulpprogramma's nu opgenomen in SDK

De .NET Core 2.1 SDK bevat nu algemene CLI-hulpprogramma's en u hoeft niet langer naar deze hulpprogramma's van het project te verwijzen.

Wijzigingsbeschrijving

In .NET Core 2.0 verwijzen projecten naar externe .NET-hulpprogramma's met de <DotNetCliToolReference> projectinstelling. In .NET Core 2.1 zijn sommige van deze hulpprogramma's opgenomen in de .NET Core SDK en is de instelling niet meer nodig. Als u verwijzingen naar deze hulpprogramma's in uw project opneemt, wordt er een foutbericht weergegeven dat lijkt op het volgende: het hulpprogramma Microsoft.EntityFrameworkCore.Tools.DotNet is nu opgenomen in de .NET Core SDK.

Hulpprogramma's die nu zijn opgenomen in .NET Core 2.1 SDK:

<DotNetCliToolReference-waarde> Hulpprogramma
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

Versie geïntroduceerd

.NET Core SDK 2.1.300

Verwijder de <DotNetCliToolReference> instelling uit uw project.

Categorie

MSBuild

Betrokken API's

N.v.t.