使用 IStringLocalizer 的当前区域性不存在清单

pio*_*lut 6 c# asp.net-core .net-core-3.1 asp.net-core-3.1

我正在使用 .NET core 3.1 开发后端应用程序。我从旧项目(.NET core 2.1)中移出了CommonResource ,该项目运行良好。我想获取指定文化中密钥的值。公共资源的实现:

public class CommonResource : ICommonResource
{
    private readonly IStringLocalizer<SharedResource> _localizer;

    public CommonResource(
        IStringLocalizer<SharedResource> localizer)
    {
        _localizer = localizer;
    }

    #region ICommonResource Members

    #region General

    public string AppName(
        string language)
        => GetString(language, nameof(AppName));

    #endregion

    #endregion

    /// <summary>
    ///     Dispose of class and parent classes
    /// </summary>
    public void Dispose()
        => GC.SuppressFinalize(this);

    private string GetString(
        string language,
        string name)
    {
        var currentCulture = CultureInfo.CurrentCulture;

        CultureInfo.CurrentCulture = new CultureInfo(language);
        var value = _localizer[name];
        CultureInfo.CurrentCulture = currentCulture;

        // TEST - check all string
        //var result = _localizer.GetAllStrings();

        return value;
    }
}
Run Code Online (Sandbox Code Playgroud)

LocalizationExtensions 与AddDefaultLocalization方法:

public static class LocalizationExtensions
{
    private const bool AcceptLanguageHeaderRequestCultureProvider = false;
    private static readonly CultureInfo CultureInfoEnUs = new CultureInfo("en-US");
    private static readonly CultureInfo CultureInfoPlPl = new CultureInfo("pl-PL");
    private static readonly CultureInfo DefaultRequestCulture = CultureInfoEnUs;

    private static readonly CultureInfo[] SupportedCultures =
    {
        CultureInfoEnUs,
        CultureInfoPlPl
    };

    public static void AddDefaultLocalization(
        this IServiceCollection serviceCollection)
    {
        serviceCollection.AddLocalization();
        serviceCollection.Configure<RequestLocalizationOptions>(
            options =>
            {
                options.DefaultRequestCulture = new RequestCulture(DefaultRequestCulture, DefaultRequestCulture);
                options.SupportedCultures = SupportedCultures;

                if (!AcceptLanguageHeaderRequestCultureProvider)
                {
                    ///sf/ask/3113653161/
                    options.RequestCultureProviders = new List<IRequestCultureProvider>
                    {
                        new QueryStringRequestCultureProvider(),
                        new CookieRequestCultureProvider()
                    };
                }
            });
    }
}
Run Code Online (Sandbox Code Playgroud)

我的 SharedResources 位于资源路径中(构建操作:嵌入式资源和访问修饰符:无代码生成)。 在此输入图像描述

不幸的是调用_localizer.GetAllStrings(); 生成异常“当前文化不存在清单”。

我尝试了很多解决方案,例如将 SharedResources 移动到根路径或安装额外的 nuget 包,但没有任何帮助。

您知道为什么在新版本.net core 中存在此问题吗?感谢帮助!