Enregistrement Types générés par Reflection.Emit comme fichier de code (.cs) au lieu de l'enregistrer dans des fichiers .dll

StackOverflow https://stackoverflow.com/questions/2571711

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");
Était-ce utile?

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 #.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top