2009-06-23 8 views
4

J'ai téléchargé un fichier zip de fichiers source contenant un projet C# avec plusieurs points d'entrée/méthodes principales. Depuis que je voulais bricoler, j'ai créé un autre comme celui-ci dans un nouveau type/classePourquoi seule une méthode Main sans paramètre est-elle considérée comme un "objet de démarrage valide" pour un projet C#?

class MyExperiments 
    { 
     static void Main(String[] args) 
     { 
     // do something 
     } 
    } 

puis je suis passé à projeter des propriétés. Il suffit de passer l'objet de démarrage à MyExperiments hein? À ma grande surprise, la liste déroulante ne l'avait pas. J'ai reconstruit, rendu la méthode publique, essayé plein de choses ... mais en vain. Enfin, j'ai édité le fichier .csproj manuellement dans le bloc-notes, puis cela a fonctionné. Plus bricoler, j'ai enlevé les paramètres pour le rendre

static void Main() 

et maintenant des propriétés du projet VS pu « voir » l'objet de démarrage. Alors maintenant, je pourrais le sélectionner en utilisant la liste déroulante. J'ai ensuite ajouté le String [] et tout a encore fonctionné.

Cela me semble un peu bizarre (car la forme la plus courante est une méthode Main avec des paramètres pour les arguments de la ligne de commande depuis les temps C/C++). MSDN indique que la liste déroulante contiendra des objets de démarrage valides s'ils existent dans votre projet.

+0

« Est-ce que quelqu'un sait où cela peut être classé ": http://connect.microsoft.com/visualstudio –

+0

(a répondu à commenter sur les types CLR, a également validé le bug de connexion) –

Répondre

6

Bonne chose que vous l'ayez copié-collé, c'est le 'S' majuscule dans Main(String[] args). Apparemment, VS utilise une correspondance de texte, et elle est sensible à la casse. Comme cela devrait probablement être.

+0

deviner qui montrera ces gens "Connaître vos types CLR" comme Jeff Richter n Jon S. :) Est-ce que quelqu'un sait où cela peut être classé .. très ennuyeux quand vous essayez de rester motivé à la fin de votre travail de jour et apprendre quelque chose. – Gishu

+0

Il a été discuté sur SO plusieurs fois et je pense que le consensus est d'utiliser une chaîne et non [System.] String, comme int au lieu de Int32 –

+2

"Comme il se doit probablement." - pas convaincu par cela; cela ne fait aucune différence pour le compilateur, alors pourquoi l'EDI devrait-il s'en préoccuper? –

5

lol - il ressemble à un bug dans l'IDE:

static void Main(String[] args) {} 

ne montre pas, mais

static void Main(string[] args) {} 

fait!

+0

WTH? M'a rendu fou pendant environ 10-20 minutes au moins. – Gishu

+0

Probablement pas un bug, mais plutôt qu'il est limité à utiliser le mot-clé C# pour le type de chaîne, tout comme vous pouvez utiliser int comme type pour une énumération mais pas Int32. Vous pouvez déclarer votre propre classe String, mais vous ne pouvez pas modifier le mot-clé string. – Guffa

+0

Merci. Fichier https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=469203 – Gishu

0

Mise à jour: Réponse à la rétroaction Se connecter/bug,

Merci pour les commentaires! Il semble le problème ici est que le paramètre "String" dans la méthode principale doit être une "chaîne" entièrement minuscule (et il semble avoir été souligné sur votre post stackoverflow ). Je vois une suggestion ici pour mettre à jour le projet page de propriétés légèrement plus intelligent de ramasser l'objet de démarrage, mais étant donné qu'il ya une solution raisonnable, nous allons investir nos ressources dans la stabilisation et l'amélioration performances de VS2010. Je vais aller à l'avance et résoudre le bug comme un "Wont Fix" mais s'il vous plaît n'hésitez pas à réactiver le bug si vous avez des questions/commentaires plus.

Merci, DJ Parc C# IDE, programme Gestionnaire

semble donc être quelque chose que vous auriez à garder à l'arrière de votre esprit pour l'instant - Gishu