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.
Aanbevolen actie
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
, ManifestResourceName
of DependentUpon
metagegevens zijn opgegeven voor een EmbeddedResource
item in het projectbestand, heeft MSBuild een manifestbestandsnaam in het patroon <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources
gegenereerd. 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 , ManifestResourceName
of DependentUpon
metagegevens hebt LogicalName
opgegeven 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 true
op , 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 EmbeddedResourceUseDependentUponConvention
false
, genereert MSBuild de manifestnaam op basis van het vorige gedrag, dat combineert RootNamespace
en het relatieve bestandspad.
Aanbevolen actie
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
EmbeddedResourceUseDependentUponConvention
false
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
Aanbevolen actie
Verwijder de <DotNetCliToolReference>
instelling uit uw project.
Categorie
MSBuild
Betrokken API's
N.v.t.