c# - 我们可以跳过 ResourceManager 吗?

标签 c#

我正在从事一个广泛使用 ResourceManager 的项目,这个问题刚刚闪过我的脑海。 我们可以在不使用 ResourceManager 的情况下读取 .resx 文件吗?我的意思是,还有其他方法吗?

最佳答案

ResourceManager 是一个方便的类,它与构建系统支持 .resx 文件的方式配合得很好。不,这不是绝对必要的。

.NET 程序集具有将任意数据嵌入到程序集 list 中的通用功能。只是一团字节,它可以是任何你想要的。构建系统也直接支持,只需将一个文件添加到您的项目并将其构建操作设置为“嵌入式资源”。在运行时,您使用 Assembly.GetManifestResourceStream() 检索该文件中的数据.

您可以就此打住,但这只是一个文件,如果您要嵌入许多小资源,它的扩展性就不太好。这是 .resx 文件的起始位置,它是一个包含友好格式资源的 XML 文件。一个让您有机会在原件丢失时再次恢复源的机会。

但 XML 格式对于资源数据来说不是很好的格式,它体积庞大,而且找回数据的成本很高。所以 .NET 有 resgen.exe,一个将 XML 文件转换为二进制文件(.resources 文件)的构建工具。紧凑且易于找回东西。并且适合作为单个 list 资源直接嵌入。

不想做的是必须自己读取 .resources 数据。您需要使用可以从字节 block 中找到特定资源的帮助程序类。你想使用 ResourceReader class ,它的 GetResourceData() 允许您指定资源名称,它会吐出资源类型和数据。

您可以就此打住,但应用通常需要不同的资源集。一个非常普遍的本地化需求。这就是卫星集会的全部内容,不同的集会只包含资源,每个集会都针对特定的文化。它们是独立的,因此当您只需要其中一组资源时,您无需为存储所有 本地化资源所需的虚拟内存付费。这里需要的是一个帮助程序类,它可以根据当前区域性自动定位和加载正确的附属程序集并为您检索资源。

该辅助类是 ResourceManager

关于c# - 我们可以跳过 ResourceManager 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23597154/

相关文章:

c# - 我可以在 C# DocumentDb 驱动程序中使用多态/继承吗

c# - 如何设计一个泛型类来反序列化 XML?

c# - 如何模拟(使用 Moq)由 Newtonsoft.json 序列化的接口(interface)?

c# - 使用冒号时的 XML 语法(标签中的 :),

c# - WPF 是否可以显式调用动画反转?

c# - 如何获得最终文件名

c# - 我如何要求用户在 C# 中输入

c# - 检测 Excel 工作簿链接

c# - Akavache 的 GetObject<T> 在等待时挂起。知道这里出了什么问题吗?

c# - IdentityServer3 替代网页浏览器导航事件