Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les packages contenant des frameworks compatibles doivent s’assurer que le code compilé sur un autre peut s’exécuter sur un autre. Voici quelques exemples de paires d’infrastructure compatibles :
- .NET Standard 2.0 et .NET 7
- .NET 6 et .NET 7
Dans ces deux cas, les consommateurs peuvent générer sur .NET Standard 2.0 ou .NET 6 et s’exécuter sur .NET 7. Si vos fichiers binaires ne sont pas compatibles entre ces frameworks, les consommateurs peuvent se retrouver avec des erreurs de compilation ou d’exécution.
La validation du package intercepte ces erreurs au moment du pack. Voici un exemple de scénario :
Supposons que vous écrivez un jeu qui manipule des chaînes. Vous devez prendre en charge les utilisateurs de .NET Framework et .NET (.NET Core). À l’origine, votre projet cible .NET Standard 2.0, mais vous souhaitez maintenant tirer parti de Span<T> .NET 6 pour éviter les allocations de chaînes inutiles. Pour ce faire, vous souhaitez cibler plusieurs cibles pour .NET Standard 2.0 et .NET 6.
Vous avez écrit le code suivant :
#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
Vous essayez ensuite d'emballer le projet (à l’aide de dotnet pack ou de Visual Studio), et cela échoue avec l’erreur suivante :
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]
Vous réalisez qu'au lieu d'exclure DoStringManipulation(string) pour .NET 6, vous devez simplement fournir une méthode supplémentaire DoStringManipulation(ReadOnlySpan<char>) pour .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.
}
Vous essayez d'emballer le projet à nouveau, et cela réussit.
Mode strict
Vous pouvez activer le mode strict pour ce validateur en définissant la EnableStrictModeForCompatibleFrameworksInPackage propriété dans votre fichier projet. L’activation du mode strict modifie certaines règles et exécute d’autres règles lors de l’obtention des différences. Cela est utile lorsque vous souhaitez que les deux côtés que vous comparez soient strictement identiques sur leur surface et leur identité. Pour plus d’informations, consultez mode Strict.