2

我试图用一些资源生成一个程序集文件。我正在使用System.Reflection.Emit.ModuleBuilder来定义资源。 AssemblyBuilder保存程序集时不会出现任何错误,但是当我尝试读取资源时,ResourceManager没有任何条目,它的ResourceSets。我不确定AssemblyBuilder不保存更多资源,或者我的资源阅读代码有问题。反射|发送|动态资源生成 - 使用IResourceWriter.AddResource(key,value)添加资源值无法读取

集生成代码:

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"); 
    } 

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

回答

1

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

enter image description here

所以在ResourceManager问题。

ResourceManager类从二进制的.resources 文件嵌入在组件或从独立的.resources 文件

并且要创建没有内嵌二进制资源获取的资源。资源文件

尝试ResourceReader,适合更好的自己的情况

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

    } 
} 

enter image description here