IStringLocalizer 未从 AssemblyLoadContext 本地化

IStringLocalizer not localizing from AssemblyLoadContext

提问人:Mavara 提问时间:11/13/2023 最后编辑:Mavara 更新时间:11/13/2023 访问量:13

问:

程序集中的一个类使用 IStringLocalizer 来获取特定语言的字符串。字符串存储在 .resx 文件中。当我从另一个类运行服务(BackgroundService)时,它被添加为托管服务(),这一切都工作正常。但是,当主机使用 AssemblyLoadContext 加载它时,它仅从默认的 .resx 文件中返回语言。services.AddHostedService(sp => ...)

服务设置如下:

var builder = Host.CreateDefaultBuilder()
                .ConfigureServices((ctx, services) =>
                {
                    services.AddLocalization();
                    ...
                }
builder.Build();

我有文件 Localization.resx 和 Localization.nl.resx,其中构建操作设置为嵌入式资源和 Localization.Designer.cs。

请考虑以下 Domain 类的代码:

public Domain(IStringLocalizer<Localization> localizer)
{
    Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("nl");
    Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("nl");

    var localizedString = localizer[nameof(Localization.Created)];
}

的值始终是其英文值,来自文件 Localization.resx。这意味着正在读取此文件(字符串未存储在其他任何地方),并且 IStringLocalizer 实际上执行了某些操作:它查找字符串,但不会本地化。仅当在 AssemblyLoadContext 中使用时。localizedString

我在 .resx 属性中尝试了不同的配置,将自定义工具设置为 (Public)ResXFileCodeGenerator,或删除 .Designer.cs 文件,因为我有 2 个示例(在 AssemblyLoadContext 之外),其中一个确实有设计器文件,另一个没有。显式设置也无济于事。此外,返回英文字符串。Localization.Culture = new CultureInfo("nl")Localization.ResourceManager.GetString("Created");

本地化 Net-6.0 resx assemblyloadcontext

评论


答: 暂无答案