2010-04-03 12 views
1

Avant de commencer laissez-moi raconter mon expérience: je suis expérimenté avec C# .NET, services web, partie XML et quelques autres. La réflexion est quelque chose de nouveau pour moi, bien que j'aie beaucoup lu et expérimenté du code expérimental, mais que je n'ai pas fait grand chose en utilisant la réflexionTypes d'enregistrement générés via Reflection.Emit comme fichier de code (.cs) au lieu de l'enregistrer dans les fichiers .dll

J'ai découvert many examples comment on peut créer Type à l'exécution et ensuite être enregistré dans un fichier d'assemblage (.dll). De tous les exemples que j'ai vu est d'enregistrer les types créés dans les fichiers .dll au lieu du fichier de code. N'y at-il aucun moyen de créer le fichier de code hors de la réflexion?

J'ai besoin de créer un fichier de code puisque je veux distribuer du code au lieu d'assemblys compilés. Ce que je veux faire est quelque chose comme xsd.exe, soit cracher un fichier .dll ou le fichier de code (dans n'importe quelle langue).

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

Répondre

4

Aucun désassembleur n'est intégré au framework .NET. Vous pouvez utiliser Reflector pour convertir l'IL que vous avez émis en l'un des langages de code source qu'il prend en charge. Il n'est pas très probable que cela fonctionnera sans problèmes, Reflector a été conçu pour convertir le code qui a été généré par un compilateur en code source. Les compilateurs ont tendance à être conservateurs à propos de l'IL qu'ils génèrent, contrairement à l'approche any-goes proposée par System.Reflection.Emit.

Si vous voulez un code source, il est préférable de le générer en premier lieu. Utilisez System.CodeDom. C'est ce que System.Xml.Serialization utilise.