Bonjours à tous
je veux créer des type enum dynamiquement à partie d'un fichier xml au moment de la compilation pour les utiliser
Est ce que quelqu'un peut m'aider
Merci d'avance
Bonjours à tous
je veux créer des type enum dynamiquement à partie d'un fichier xml au moment de la compilation pour les utiliser
Est ce que quelqu'un peut m'aider
Merci d'avance
Au moment de la compilation, je ne vois pas bien (de plus c'est contradictoire avec ton titre, où tu parles de runtime, pas de compiletime).
Au moment de l'exécution c'est possible avec le code DOM.
ceci dit tu peux faire un utilitaire utilisant le code DOM qui sera lancé au moment de la compilation. (à l'aide des propriétés Custom Tools et tutti quanti).
Je veux bien dire au moment de l'execution puisque j'ai pas une visibilité sur mon xml le fichier xml
Pour quoi tu ne construits pas simplement une liste de String que tu charges via ton fichier xml ?
Les règles du forum
Le trio magique : FAQ + Cours + fonction rechercher
Mes articles
Pas de questions par messages privés svp
Software is never finished, only abandoned.
A tout hasard, voici un exemple de génération d'enum à partir d'une liste de valeurs : (génération du source et génération de l'assembly in-memory).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 private static string generateEnum(string[] MyVals ) { StringBuilder sbCodeSource = new StringBuilder(); StringWriter sw = new StringWriter(sbCodeSource); CompilerParameters compilerParameters = new CompilerParameters(); compilerParameters.GenerateExecutable = false; compilerParameters.GenerateInMemory = true; compilerParameters.IncludeDebugInformation = false; compilerParameters.WarningLevel = 1; // Invoke compilation. CodeDomProvider provider = CodeDomProvider.CreateProvider( "C#" ); CodeNamespace myNs = new CodeNamespace("MyNameSpace"); CodeCompileUnit compileUnit = new CodeCompileUnit(); compileUnit.Namespaces.Add(myNs); CodeTypeDeclaration enumDeclaration = new CodeTypeDeclaration("MyEnum"); enumDeclaration.IsEnum = true; enumDeclaration.Attributes = MemberAttributes.Public; myNs.Types.Add(enumDeclaration); foreach (string val in MyVals) { CodeMemberField enumField = new CodeMemberField(); enumField.Name = val; enumDeclaration.Members.Add(enumField); } provider.GenerateCodeFromCompileUnit(compileUnit, sw, null); CompilerResults compilerResults = provider.CompileAssemblyFromDom(compilerParameters, compileUnit); if(compilerResults.Errors.Count == 0) { return sbCodeSource.ToString(); } return null; }
mainteneant comment je peux utiliser ce nouveau type généré d'habitude si c'est un type connu string par exemple je met typeof(System.String)
maintenant queceque je vais mettre
Partager