首先,我不太了解如何处理物品和如何处理物品.

该项目:

目前,我正在开发一个解决方案,其中包括ASP.NETAPI、WPF和库项目(都是.NET6.0).该库包含用于提供本地化字符串的.resx文件.我已经按照this guide实现了本地化.除了在某些情况下,这种方法运行得很好.主要问题在WPF项目中.我将简化命名空间,使其更易于访问:

  • WPF项目:My.Namespace.WPF
  • 图书馆项目:My.Namespace.Language

为了获得所有支持的语言,我在My.Namespace.Language中使用了这个类:

public class LanguageProvider
{
    public static IEnumerable<CultureInfo> GetSupportedLanguages()
    {
        List<CultureInfo> supportedLanguages = new();
        CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.NeutralCultures);
        foreach (CultureInfo culture in cultures)
        {
            try
            {
                using ResourceSet? rs = Resources.Strings.ResourceManager.GetResourceSet(culture, true, false);
                if (rs is not null && culture.TwoLetterISOLanguageName != "iv")
                {
                    if (!supportedLanguages.Contains(culture))
                    {
                        supportedLanguages.Add(culture);
                    }
                }
                else if (culture.TwoLetterISOLanguageName == "en")
                {
                    supportedLanguages.Add(culture);
                }
            }
            catch (Exception)
            {

            }
        }

        return supportedLanguages;
    }
}

该项目还包含包含Strings.resxStrings.de.resx(命名空间My.Namespace.Language.Resources)的资源文件夹.要从我的WPF项目中的资源中获取字符串,我只需使用以下命令:

string customText = My.Namespace.Language.Resources.Strings.sometext;

问题是:

在第一次调用GetSupportedLanguages()之后初始化的所有对象都不能访问Strings并抛出ObjectDisposedException: Cannot access a closed resource set.,这通常是在MainWindow初始化之前调用的.因此,我甚至不能展示它.我是否必须以不同的方式实现可用语言的列表,因为资源是在某个点上部署的?

推荐答案

显然,您不应该为了能够重用ResourceManager来获得资源而处置这ResourceSet.删除using:

ResourceSet? rs = strings.ResourceManager.GetResourceSet(culture, true, false);

Csharp相关问答推荐

如何从C#中有类.x和类.y的类列表中映射List(字符串x,字符串y)?

在依赖性注入和继承之间进行 Select

Microsoft. SQLServer. Types(106.1000.6)在try 从用户定义的类型检索值时引发异常

如何将Kafka消息时间戳转换为C#中的日期和时间格式?

如何在NodaTime中为Instant添加一年?

Blazor服务器端的身份验证角色

Mongo作为.NET中Testcontainers的副本集

如何在实体框架中添加包含列表?

C#阻塞调用或await calling inside calling方法

如何在毛伊岛应用程序中完美地同步视图模型和视图的加载?

为什么C#认为这个非托管 struct 有一个重叠

.NET:从XPath定位原始XML文档中的 node

源代码生成器:CS8795分部方法';Class1.GetS2(字符串)';必须有实现部分,因为它有可访问性修饰符?

如何在Akka.NET中重新启动执行元时清除邮箱

我应该为C#12中的主构造函数参数创建私有属性吗?

获取应用程序版本信息时出现奇怪信息

ASP.NET核心MVC|如何在控制器方法之间传递值

HttpClient,上传文件时实现进度

客户端/服务器RPC如何处理全局变量?

如何根据分割文本的块数来计算文本的大小?