2

我正在尝试使用一些资源生成一个程序集文件。我System.Reflection.Emit.ModuleBuilder用来定义资源。AssemblyBuilder保存程序集而不给出任何错误,但是当我尝试读取资源时,ResourceManager它没有任何条目ResourceSets。我不确定AssemblyBuilder是否保存添加的资源或我的资源读取代码有问题。

汇编生成代码:

public void GenerateAsm()
    {
        string myAsmName = "MyAssembly.resources";
        string myAsmFileName = myAsmName + ".dll";
        string resourceName = "MyAssembly.Resource.fr.resources";

        AppDomain appDomain = Thread.GetDomain();
        AssemblyName asmName = new AssemblyName();
        asmName.Name = myAsmName;
        AssemblyBuilder myAsmBuilder = appDomain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.RunAndSave);

        ModuleBuilder myModuleBuilder = myAsmBuilder.DefineDynamicModule(myAsmFileName,myAsmFileName);
        IResourceWriter rw = myModuleBuilder.DefineResource(resourceName, "My Description", ResourceAttributes.Public);

        rw.AddResource("ResKey1", "Resource value 1.");
        rw.AddResource("ResKey2", "Resource value 2.");
        myAsmBuilder.Save(myAsmFileName);    
    }

资源读取代码:

public void ReadResource()
    {
        ResourceManager rm = new ResourceManager("MyAssembly.Resource.fr.resources", Assembly.LoadFrom("MyAssembly.resources.dll"));
        string greeting = rm.GetString("ResKey1");
    }

资源管理器可以加载资源,但它没有任何键值对。

4

1 回答 1

2

生成的程序集包含资源值:

在此处输入图像描述

所以问题在ResourceManager.

ResourceManager 类从嵌入在程序集中的二进制 .resources 文件或独立的 .resources 文件中检索资源

您正在创建的资源不是嵌入的二进制 .resources 文件

试试看ResourceReader,更适合你的情况

using (var reader = new ResourceReader(asm.GetManifestResourceStream(resourceName)))
{
    foreach (DictionaryEntry entry in reader)
    {

    }
}

在此处输入图像描述

于 2017-09-29T07:36:07.413 回答