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