【问题标题】:Reflection | Emit | Dynamic Resource Generation - Added resource values using IResourceWriter.AddResource(key,value) cannot read反射 |发射 |动态资源生成 - 使用 IResourceWriter.AddResource(key,value) 添加的资源值无法读取
【发布时间】:2017-08-16 13:25:00
【问题描述】:

我正在尝试生成包含一些资源的程序集文件。我正在使用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");
    }

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

【问题讨论】:

    标签: c# reflection reflection.emit resourcemanager assemblybuilder


    【解决方案1】:

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

    所以问题在ResourceManager

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

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

    试试ResourceReader,更适合你的情况

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

    【讨论】:

      猜你喜欢
      • 2015-09-12
      • 2012-11-25
      • 2015-10-04
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      • 2014-04-13
      • 1970-01-01
      • 2016-05-06
      相关资源
      最近更新 更多