Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Pakketten met compatibele frameworks moeten ervoor zorgen dat code die is gecompileerd voor een framework, ook op een ander framework kan worden uitgevoerd. Voorbeelden van compatibele frameworkparen zijn:
- .NET Standard 2.0 en .NET 7
- .NET 6 en .NET 7
In beide gevallen kunnen consumenten bouwen op .NET Standard 2.0 of .NET 6 en uitvoeren op .NET 7. Als uw binaire bestanden niet compatibel zijn tussen deze frameworks, kunnen consumenten compilatie- of runtime-fouten krijgen.
Bij pakketvalidatie worden deze fouten tijdens het packen van pakketten onderschept. Hier volgt een voorbeeldscenario:
Stel dat je een spel schrijft waarmee je tekenreeksen manipuleert. U moet zowel .NET Framework- als .NET (inclusief .NET Core) consumenten ondersteunen. Oorspronkelijk is uw project gericht op .NET Standard 2.0, maar nu wilt u profiteren van Span<T> .NET 6 om onnodige tekenreekstoewijzingen te voorkomen. Hiervoor wilt u meerdere doelen instellen voor .NET Standard 2.0 en .NET 6.
U hebt de volgende code geschreven:
#if NET6_0_OR_GREATER
public void DoStringManipulation(ReadOnlySpan<char> input)
{
// use spans to do string operations.
}
#else
public void DoStringManipulation(string input)
{
// Do some string operations.
}
#endif
Vervolgens probeert u het project in te pakken (met behulp van dotnet pack of Visual Studio), maar er treedt een fout op en het mislukt met de volgende foutmelding:
D:\demo>dotnet pack
Microsoft (R) Build Engine version 17.0.0-preview-21460-01+8f208e609 for .NET
Copyright (C) Microsoft Corporation. All rights reserved.
Determining projects to restore...
All projects are up-to-date for restore.
You are using a preview version of .NET. See: https://aka.ms/dotnet-core-preview
You are using a preview version of .NET. See: https://aka.ms/dotnet-core-preview
PackageValidationThrough -> D:\demo\bin\Debug\netstandard2.0\PackageValidationThrough.dll
PackageValidationThrough -> D:\demo\bin\Debug\net6.0\PackageValidationThrough.dll
Successfully created package 'D:\demo\bin\Debug\PackageValidationThrough.1.0.0.nupkg'.
C:\Program Files\dotnet\sdk\6.0.100-rc.1.21463.6\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Compatibility.Common.targets(32,5): error CP0002: Member 'A.B.DoStringManipulation(string)' exists on lib/netstandard2.0/PackageValidationThrough.dll but not on lib/net6.0/PackageValidationThrough.dll [D:\demo\PackageValidationThrough.csproj]
U realiseert zich dat in plaats van DoStringManipulation(string) uit te sluiten voor .NET 6, u gewoon een extra DoStringManipulation(ReadOnlySpan<char>) methode moet bieden voor .NET 6.
#if NET6_0_OR_GREATER
public void DoStringManipulation(ReadOnlySpan<char> input)
{
// use spans to do string operations.
}
#endif
public void DoStringManipulation(string input)
{
// Do some string operations.
}
U probeert het project opnieuw in te pakken en het lukt.
Strikte modus
U kunt de strikte modus voor deze validator inschakelen door de EnableStrictModeForCompatibleFrameworksInPackage eigenschap in uw projectbestand in te stellen. Als u de strikte modus inschakelt, worden bepaalde regels gewijzigd en worden enkele andere regels uitgevoerd bij het verkrijgen van de verschillen. Dit is handig als u wilt dat beide zijden die u vergelijkt strikt hetzelfde zijn op hun oppervlakte en identiteit. Zie de modus Strikt voor meer informatie.