Einige Microsoft.Extensions-Pakete sind im gemeinsamen Framework enthalten.

Um die Anwendungsgröße zu verringern, Paketabhängigkeiten zu vereinfachen und die Wartung zu optimieren, enthält .NET 11 neun Microsoft.Extensions.*-Bibliotheken im gemeinsamen Basisframework. Projekte, die explizit auf diese Pakete verweisen, erhalten Buildwarnung NU1510. Sie können die Warnung beheben, indem Sie das PackageReference entfernen. Wenn Sie von einer älteren Version dieser Pakete abhängig sind, kann das Upgrade auf die .NET 11-Version zu schwerwiegenden Änderungen führen, die zwischen älteren Versionen und .NET 11 eingeführt wurden.

Eingeführt in Version

.NET 11 Vorschau 4

Bisheriges Verhalten

Zuvor waren die folgenden Microsoft.Extensions.*-Bibliotheken nicht Teil des .NET freigegebenen Frameworks. (Sie erhalten das gemeinsam genutzte Framework durch die Verwendung von Sdk="Microsoft.NET.Sdk" oder indem Sie auf eines der anderen .NET SDKs verweisen.) Projekte, die diese benötigten, erforderten explizite PackageReference-Einträge, und der Buildprozess kopierte die Assemblys in den Ausgabeordner:

Neues Verhalten

Ab .NET 11 sind diese neun Bibliotheken Teil des .NET gemeinsamen Basisframeworks:

  • Für diese Bibliotheken benötigen Sie kein PackageReference, wenn Sie net11.0 oder höher als Ziel festlegen.
  • Wenn Sie explizit auf diese Pakete verweisen, erhalten Sie buildwarnung NU1510.
  • Diese Assemblys werden nicht mehr in den Ausgabeordner kopiert.
  • In seltenen Fällen können die zusätzlichen APIs im Standardladesatz Namen- oder Typkonflikte verursachen. Um einen Konflikt zu lösen, fügen Sie explizitere using Direktiven hinzu, verwenden einen Alias oder verwenden einen vollqualifizierten Typnamen.

Art der einschneidenden Änderung

Diese Änderung ist eine Verhaltensänderung.

Grund für die Änderung

Die Einbeziehung dieser häufig verwendeten Bibliotheken im freigegebenen Framework reduziert die Anwendungsgröße, vereinfacht Paketabhängigkeiten und optimiert die Wartung.

Entfernen Sie PackageReference für jedes betroffene Paket:

Für Projekte, die ausschließlich auf net11.0 oder höher abzielen, entfernen Sie PackageReference vollständig:

<!-- Remove entries like these from your .csproj when targeting net11.0 only: -->
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="..." />
<PackageReference Include="Microsoft.Extensions.Options" Version="..." />

Ihr Code funktioniert weiterhin ohne Änderungen – die APIs sind jetzt Teil der Laufzeit.

Bei multizielorientierten Projekten (z. B. ) wird NU1510 nicht ausgelöst, <TargetFrameworks>net10.0;net11.0</TargetFrameworks>da das Paket für das ältere TFM noch erforderlich ist. Es ist keine Aktion erforderlich– NuGet wählt automatisch die entsprechende Assembly für jedes Zielframework aus. Wenn Sie explizit sein möchten, können Sie den Verweis bedingt einschließen:

<!-- Keep the reference only for TFMs that don't include it in the shared framework: -->
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="..." Condition="'$(TargetFramework)' != 'net11.0'" />

Beheben von Kompilierungszeitnamenkonflikten (selten):

Wenn ein Kompilierungsfehler auftritt, da ein Name in Ihrem Code mit einer der neu enthaltenen APIs in Konflikt steht, verwenden Sie einen der folgenden Ansätze:

  • Fügen Sie eine spezifischere using Direktive hinzu.
  • Verwenden Sie einen using Alias.
  • Verwenden Sie einen vollqualifizierten Typnamen.

Wenn Sie von einer älteren Version dieser Pakete abhängen:

Um Laufzeitfehler wie MissingMethodException oder TypeLoadException zu vermeiden, kompilieren Sie alle abhängigen Bibliotheken oder Binärdateien gegen die .NET 11-Referenzassemblys neu. Wenn Sie net11.0 als Ziel verwenden, entfernen Sie PackageReference und erstellen Sie es neu. Wenn Sie frühere TFMs als Ziel verwenden oder mehrere Ziele festlegen, aktualisieren Sie die Paketreferenzen für die Ziele, die nicht net11.0 sind, auf die aktuelle Version und kompilieren Sie anschließend erneut.

Beim Upgrade auf die .NET 11-Versionen dieser Pakete können die folgenden Änderungen von früheren Versionen auftreten:

Microsoft. Extensions.DependencyInjection.Abstractions

Microsoft.Extensions.Logging.Abstractions

Microsoft.Extensions.Hosting.Abstractions

Betroffene APIs

Keiner.