【问题标题】:Enumerating the contents of a .NET embedded resource at runtime在运行时枚举 .NET 嵌入式资源的内容
【发布时间】:2009-04-17 03:43:22
【问题描述】:

我有一个 .resx 文件,其中包含我的项目的一些字符串资源。在运行时,我想读取此文件中定义的所有资源并将它们存储在容器中。原因并不重要。

我读过 ResourceReader 类,它对二进制 .resource 文件进行操作。我的印象是 .resx 在构建时转换为二进制格式并嵌入到程序集中。这是真的,还是我需要使用 resgen 手动生成它?如果确实需要手动生成,如何将其添加到我的 VS 项目中,将其嵌入到程序集中,并在运行时访问它?

简而言之,我如何在运行时使用 ResourceReader 访问 .resx 中定义的资源?

【问题讨论】:

    标签: .net resources


    【解决方案1】:

    您可以使用ResourceReader.GetEnumerator() 获取资源的枚举器。

    如果您尝试直接读取 .resx 文件,您可能需要考虑使用 ResXResourceReader 而不是 ResourceReader。

    如果您尝试从 .resources(resx -> 资源)中编译的内容进行读取,则需要适当地修改名称。假设您将 .resX 文件命名为“MyRes.resx”,您将要使用:

    var resManager = new ResourceManager("MyRes.resources");
    

    如果 resx 文件在附属程序集中,它会添加项目名称,即:("MyProject.MyRes.resources");

    如果您使用本地化,您也将需要它:("MyProject.MyRes.en-GB.resources");

    【讨论】:

    • 是的,但首先我需要通过将 .resource 文件的路径传递给 ResourceReader 来构造它。我创建了一个 .resx 文件,但我不明白 .resource 文件的来源。
    • 我曾想过简单地使用 resgen 生成一个并将其添加到我的项目中,但我认为二进制资源应该嵌入到程序集中。我一定是误会了什么。
    • .resource 文件由资源文件生成器在构建时生成:msdn.microsoft.com/en-us/library/ccec7sz1(VS.80).aspx
    • 默认情况下,VS 将 .resource 文件转储到 obj/release 中。有没有办法改变这种行为?里德:谢谢你更详细的回复。
    • 只是为了添加答案,您可以使用流加载嵌入式资源.. var asm = Assembly.GetExecutingAssembly(); var name = asm.GetManifestResourceNames(); var 流 = asm.GetManifestResourceStream(name[0]); ResourceReader reader = new ResourceReader(stream);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 2011-10-30
    相关资源
    最近更新 更多