2010-04-17 4 views
0

Je viens de créer une petite application qui compile par programme du code en utilisant le compilateur C#, et cela fonctionne avec brio. Mais, une chose que je dois faire est de compiler le code Windows.Forms. Comme, je peux créer une application de console avec elle, mais je ne peux pas créer un formulaire basé sur une interface graphique. Voici le lien qui m'a lancé:C# Compiler et Windows.Forms

http://support.microsoft.com/kb/304655

quelqu'un peut aider s'il vous plaît?

Merci :)

mise à jour

using System; 
using System.Collections; 
using System.ComponentModel; 
using System.ComponentModel.Design; 
using System.Diagnostics; 
using System.Drawing.Design; 
using System.Windows.Forms; 
using System.Windows.Forms.Design; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      MessageBox.Show("hi jason"); 
     } 
    } 
} 

Le code ci-dessus est ce que je tape dans mon application. Et quand j'essaie de compiler ce code, mon application me donne des tas d'erreurs, et ne produit pas d'exe (évidemment). Mais, ma demande toujours compile avec succès des applications de la console straightup ...

+3

Quelle partie ne fonctionne pas? – Henri

+0

ok, quand je crée un nouveau formulaire dans Visual Studio, alors copiez tout le code dans le fichier Form1.cs et collez-le dans mon application, j'obtiens des erreurs, des tonnes d'entre eux disant "Le type ou l'espace de nommage 'ComponentModel' n'existe pas dans l'espace de noms 'System' (manque-t-il une référence d'assembly?), et le type ou l'espace de noms 'Windows' n'existe pas dans l'espace de nommage 'System' ETC.Il y a une erreur pour chaque directive using –

+0

Je m'excuse si ce commentaire ci-dessus est tombé sur une petite nuit impolie, ce n'était pas mon intention –

Répondre

1

Vous devez inclure à la fois le Form1.cs et Form1. Designer.cs pour le compiler entièrement. Bien sûr, vous devez inclure des références aux formulaires et à tout autre espace de noms nécessaire.

+0

Pouvez-vous suggérer comment je ferais cela? MSDN, ou même cet article (dans ma question) ne dit pas comment faire cela. Il ne dit même rien à ce sujet. –

+0

Appelez CompileAssemblyFromFile, et passez les noms des deux noms de fichiers: 'provider.CompileAssemblyFromFile (options," Form1.cs "," Form1.Designer.cs ");' – itowlson

+0

merci :) MAIS, maintenant il est dit: SampleCompiler.exe fait ne pas contenir une méthode statique 'Main' appropriée pour un point d'entrée! ... Je n'ai jamais vu une méthode Main dans un fichier Form1.cs avant ... Qu'est-ce que le? –

1

Vous avez juste besoin d'ajouter les System, System.Drawing et System.Windows.Forms assemblées comme référence lorsque vous compilez

+0

Je l'ai fait et c'est à ce moment-là que ces erreurs sont apparues.Veuillez voir ma question, je viens de la mettre à jour pour montrer exactement ce que je tape –

+0

ajouter les références? Vous devez les ajouter à la propriété 'ReferencedAssemblies' de' CompilerParameters' –

+0

Ohhhhh, de cette façon ... Je pensais que vous parliez des autres (i, e, "Using System.Drawing" au haut de la fichier) .. kk Essayer maintenant :) –

3

Vous avez le même problème que moi.

Tout ce que vous devez faire est de dire au compilateur de compiler le programme en tant que winexe. Pour ce faire, il suffit d'ajouter ceci à vos CompilerParams:

CompilerParams.CompilerOptions = "/target:winexe"; 

Mais aussi noter que compilera avec l'icône par défaut, vous devrez ajouter des arguments supplémentaires à cette (qui a l'air horrible!):

if (File.Exists(iconPath)) 
    CompilerParams.CompilerOptions = "/target:winexe" + " " + "/win32icon:" + "\"" + iConPath + "\""; 
else 
    CompilerParams.CompilerOptions = "/target:winexe"; 

de cette façon, il vérifiera si l'icône existe avant d'essayer de le mettre dans, pour vous faire gagner un peu de mal que je devais passer par ....

+0

... la prochaine fois peut-être dire que la solution vous met en colère d'une manière différente .. acclamations! –