2

Je tente de générer un fichier d'assemblage avec certaines ressources. J'utilise System.Reflection.Emit.ModuleBuilder pour définir les ressources. AssemblyBuilder enregistrer l'assemblage sans donner d'erreurs, mais quand j'essaye de lire les ressources, ResourceManager n'a aucune entrée dans ResourceSets. Je ne suis pas sûr AssemblyBuilder ne pas enregistrer des ressources ajoutées ou mon code de lecture de ressources a des problèmes.Réflexion | Emettre | Génération de ressources dynamiques - Ajout de valeurs de ressources à l'aide de IResourceWriter.AddResource (clé, valeur) impossible à lire

code de génération de l'Assemblée:

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

code de lecture des ressources:

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

gestionnaire de ressources peut charger des ressources, mais il ne dispose pas de paires de valeurs clés.

Répondre

1

L'ensemble généré contient les valeurs de ressources:

enter image description here

Le problème dans un ResourceManager.

La classe ResourceManager récupère les ressources à partir d'un .resources binaire fichier qui est intégré dans un ensemble ou à partir d'un fichier .resources autonome

et les ressources que vous créez est pas embeded binaire. ressources fichiers

Essayez ResourceReader, qui est mieux adaptée à votre situation

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

    } 
} 

enter image description here