2

J'ai le problème suivant, je vais essayer de le décrire rapidement.Visual Studio 2010 C# compilation runtime des winforms

Dans mon programme, il est possible de compiler un winform en .exe en cliquant sur un bouton.

Maintenant, j'essayé de le faire avec CodeDom, donc dans mon programme je la ligne suivante:

CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, text); 

codeProvider est CodeDomProvider et texte est la source d'où compiler. Le problème est le winform que je dois sauvegarder car un .exe a derrière lui une classe qui utilise d'autres classes et formes, et, puisque le paramètre 'text' est un paramètre de chaîne, il doit inclure toutes ces classes, ce qui résulte en quantité énorme de code, pour ne pas mentionner beaucoup d'erreurs. Here est un exemple de ce que je veux dire.

Il doit y avoir d'autres façons, la question est, que sont-ils? Merci d'avance!

+2

Quel est le problème que vous essayez de résoudre? – jfs

+0

Je suis sûr que nous pouvons trouver une meilleure solution à votre problème si vous nous dites quelles sont les exigences de l'entreprise. –

Répondre

1

Si vous utilisez toujours le même ensemble de classes, il vaudrait la peine de placer ces classes communes dans une bibliothèque de classes et de s'y référer à partir du code compilé dynamiquement. De même dans tous les cas, il est difficile de voir les améliorations que vous attendez - si le code doit être compilé, il doit être compilé, et il y a beaucoup de code qui peut contenir des erreurs. il.

+0

L'ensemble des classes est le même, je vais essayer de suivre vos conseils, merci! –

+0

@Jon Skeet Désolé de revenir à la question, mais je suis encore coincé. J'ai créé une bibliothèque de classes et quand je l'appelle de mon projet principal, en créant un objet, tout va bien. Mais comment puis-je le passer au code compilé dynamiquement en utilisant CodeDom? Comment puis-je l'ajouter en tant que source d'où compiler? En gardant à l'esprit que le constructeur devrait prendre un paramètre, il ressemble à ceci: 'CodeToCompile.TForm test = new CodeToCompile.TForm (TestElement.PanelsWithTestElements);' Merci beaucoup d'avance! –

+0

@ tube-builder: Ajoutez une référence dans CompilerParameters que vous passez à CompileAssemblyFromSource. Je ne sais pas où le constructeur vient dans votre question ... –

Questions connexes