Enregistrement Types générés par Reflection.Emit comme fichier de code (.cs) au lieu de l'enregistrer dans des fichiers .dll
-
24-09-2019 - |
Question
Avant de commencer à me laisser raconter mon expérience: je suis expérimenté avec .NET C #, les services Web, une partie XML et quelques autres. La réflexion est quelque chose de nouveau pour moi, bien que je l'ai beaucoup lu sur et essayé un code expérimental, mais ne l'ai pas fait grand chose en utilisant la réflexion
J'ai vérifié many examples
de la façon dont nous pouvons créer un type à l'exécution et puis qui peut être enregistré dans un fichier assemblage (.dll). De tous les exemples que je l'ai vu est de sauver les types créés dans les fichiers .dll à la place du fichier de code. N'est-il possible de créer le fichier de code de réflexion?
Je dois créer un fichier de code que je veux distribuer le code au lieu des assemblées compilées. Ce que je veux faire est quelque chose comme xsd.exe
ne soit cracher un .dll ou le fichier de code (dans toutes les langues).
est pas là un moyen de créer un fichier de code, puisque la plupart de l'endroit où je peux trouver est
AssemblyBuilder ab = System.AppDomain.CurrentDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.Save);
puis enfin
ab.Save("QuoteOfTheDay.dll");
La solution
Il n'y a pas désassembleur construit dans le framework .NET. Vous pouvez utiliser réflecteur pour convertir l'IL vous émis dans l'une des langues de code source, il prend en charge. Il est pas très probable que cela fonctionnera sans problème, réflecteur a été conçu pour convertir le code qui a été généré par un compilateur retour au code source. Compilateurs ont tendance à être prudent sur l'IL qu'ils génèrent, contrairement à quoi que ce soit-approche qui va System.Reflection.Emit offres.
Si vous voulez le code source, vous êtes mieux en générant en premier lieu. Utilisez System.CodeDom. C'est ce qui utilise System.Xml.Serialization.
Autres conseils
En général, soit les classes de cordes ou CodeDOM ( http://msdn.microsoft .com / fr-fr / bibliothèque / y2k85ax6.aspx ) sont utilisés pour générer la source C #.