Localization: "Pubternal" APIs removed

To better maintain the public API surface of ASP.NET Core, some "pubternal" localization APIs were removed. A "pubternal" API has a public access modifier and is defined in a namespace that implies an internal intent.

For discussion, see dotnet/aspnetcore#22291.

Version introduced

5.0 Preview 6

Old behavior

The following APIs were public:

  • Microsoft.Extensions.Localization.Internal.AssemblyWrapper
  • Microsoft.Extensions.Localization.Internal.IResourceStringProvider
  • Microsoft.Extensions.Localization.ResourceManagerStringLocalizer constructor overloads accepting either of the following parameter types:
    • AssemblyWrapper
    • IResourceStringProvider

New behavior

The following list outlines the changes:

  • Microsoft.Extensions.Localization.Internal.AssemblyWrapper became Microsoft.Extensions.Localization.AssemblyWrapper and is now internal.
  • Microsoft.Extensions.Localization.Internal.IResourceStringProvider became Microsoft.Extensions.Localization.Internal.IResourceStringProvider and is now internal.
  • Microsoft.Extensions.Localization.ResourceManagerStringLocalizer constructor overloads accepting either of the following parameter types are now internal:
    • AssemblyWrapper
    • IResourceStringProvider

Reason for change

Explained more thoroughly at aspnet/Announcements#377, "pubternal" types were removed from the public API surface. These changes adapt more classes to that design decision. The classes in question were intended as extension points for the team's internal testing.

Although it's unlikely, some apps may intentionally or accidentally depend upon the "pubternal" types. See the New behavior sections to determine how to migrate away from the types.

If you've identified a scenario which the public API allowed before this change but doesn't now, file an issue at dotnet/aspnetcore.

Affected APIs