Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Pakete mit kompatiblen Frameworks müssen sicherstellen, dass Code, der gegen eines kompiliert wurde, auch gegen ein anderes ausgeführt werden kann. Beispiele für kompatible Framework-Paare sind:
- .NET Standard 2.0 und .NET 7
- .NET 6 und .NET 7
In beiden Fällen können Entwickler gegen .NET Standard 2.0 oder .NET 6 entwickeln und unter .NET 7 ausführen. Wenn Ihre Binärdateien nicht zwischen diesen Frameworks kompatibel sind, könnten Endbenutzer Kompilierungs- oder Laufzeitfehler erleben.
Bei der Paketüberprüfung werden diese Fehler beim Packen erfasst. Hier ist ein Beispielszenario:
Angenommen, Sie schreiben ein Spiel, das Zeichenfolgen bearbeitet. Sie müssen .NET Framework- und .NET Core-Consumer unterstützen. Ursprünglich haben Sie Ihr Projekt auf .NET Standard 2.0 ausgerichtet, aber jetzt möchten Sie Span<T>
in .NET 6 nutzen, um unnötige Zeichenfolgenzuweisungen zu vermeiden. Dazu möchten Sie mehrere Ziele für .NET Standard 2.0 und .NET 6 erstellen.
Sie haben den folgenden Code geschrieben:
#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
Anschließend versuchen Sie, das Projekt zu packen (entweder mit dotnet pack
oder Visual Studio), und es schlägt mit dem folgenden Fehler fehl:
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]
Sie erkennen, dass Sie, anstatt DoStringManipulation(string)
für .NET 6 auszuschließen, einfach nur eine zusätzliche DoStringManipulation(ReadOnlySpan<char>)
-Methode für .NET 6 bereitstellen sollten.
#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.
}
Sie versuchen, das Projekt erneut zu packen, und der Vorgang ist erfolgreich.
Strict-Modus
Sie können den strikten Modus für diesen Validator aktivieren, indem Sie die EnableStrictModeForCompatibleFrameworksInPackage
Eigenschaft in Der Projektdatei festlegen. Das Aktivieren des strengen Modus ändert einige Regeln und führt einige andere Regeln aus, wenn die Unterschiede angezeigt werden. Dies ist nützlich, wenn Sie möchten, dass beide Seiten, die Sie vergleichen, im Oberflächenbereich und in ihrer Identität streng gleich sind. Weitere Informationen finden Sie im Strict-Modus.