2010-07-21 4 views
1

J'ai un projet C# compilant normalement. Lorsque je lance le projet via l'IDE de Visual Studio, il fonctionne correctement et se termine proprement. Cependant, lorsque je navigue dans le répertoire du projet et que j'essaie d'exécuter le programme en double-cliquant sur le fichier "exe" ou en le référençant via la fenêtre d'exécution, il y a des erreurs.Projet de ligne de commande C# - Erreur lors de l'exécution via .exe

J'ai réduit le problème à

Console.WriteLine("output ->" + any_variable); 

Pour une raison quelconque si j'imprime une variable en utilisant la Console.WriteLine l'application si l'erreur RAN comme décrit précédemment.

Si je supprime cette ligne, l'exécutable créé par Visual Studio fonctionnera très bien si je double-clique dessus. Je suis vraiment confus par ça. Mon but ici est de créer ce projet en ligne de commande en tant que tâche planifiée.

+0

Si vous exécutez l'application à partir d'une invite de commande, il faut imprimer hors la trace de la pile si elle s'exécute en mode débogage. Si vous avez plus d'idée, postez la trace de la pile sinon. (Et supprimer la balise asp.net de la question) – Jaymz

+0

S'il vous plaît vérifier ma mise à jour et nous fournir soit plus de code ou des détails d'exception. –

Répondre

4

Je suppose que l'erreur n'a rien à voir avec WriteLine ou même Console. Bien qu'il soit courant de faire la différence entre l'exécution de l'IDE et l'exécution du double-clic, vous pouvez démarrer l'EDI en tant qu'administrateur ou l'emplacement que vous écrivez/lisez depuis/vers est différent et dispose de listes de contrôle d'accès différentes cela), cela ne semble pas être le cas ici.

Pour intercepter votre erreur, compilez-le en mode débogage. Démarrez votre application (éventuellement avec une boîte de message quelconque). Démarrez l'EDI et sélectionnez Déboguer et Joindre au processus (vous avez tout le temps si vous mettez votre application en pause avec une boîte de message). Sélectionnez votre processus Exécuter jusqu'à ce que vous receviez l'erreur. Vous devriez maintenant recevoir l'erreur dans l'IDE, même si l'application est exécutée en double-cliquant sur le fichier EXE. Vous pouvez voir la pile et le débogage comme vous le feriez normalement.

À mon avis? La variable que vous imprimez fait quelque chose qui augmente l'erreur.

Altenativement: un simple try/catch autour de l'instruction incriminée plus une boîte de message avec le Exception.Message devrait aussi vous donner plus d'informations.

+0

Merci, il s'est avéré que c'était un problème avec un projet que j'avais référencé. Après avoir attrapé l'exception, cette erreur était claire. Je ne suis pas sûr pourquoi le projet référencé n'est pas appliqué au fichier .exe tout en fonctionnant correctement dans l'EDI, mais je continuerai à chercher. Si quelqu'un pouvait connaître la réponse à cette question, cela aiderait grandement. – Ryan

+0

@Ryan, cette nouvelle information semble excellente pour une nouvelle question. Si vous considérez que ceci ou une autre est la réponse à votre question (originale), assurez-vous de la marquer comme telle (la grande coche verte sur la gauche), vous gagnerez même des points en le faisant. Bienvenue à SO! Et jetez un oeil ici pour quelques conseils: http://stackoverflow.com/faq – Abel

1

Je suis désolé, je me suis trompé ... donc EDIT

Placez votre code dans capture try {} {} construire:

try 
{ 
//your code goes here 
} 
catch (Exception ex) 
{ 
    Console.WriteLine("An error occured: {0}", ex.Message); 
    if (ex.InnerException != null) 
     Console.WriteLine("Inner Exception: {0}", ex.InnerException.Message); 
    Console.WriteLine("Stack Trace: {0}", ex.StackTrace); 
} 

Cela est nécessaire pour savoir étaient est votre problème, à quelle ligne de code etc.

+0

Même si je suis d'accord avec votre observation, pourquoi cela ferait-il une différence entre courir dans l'EDI et à l'extérieur? Cela devrait vous donner une erreur de compilation. – Abel

+1

En fait, le second argument de la chaîne '+' opérateur peut être n'importe quel type. String appellera le 'ToString()' automatiquement. –

+0

Ah, maintenant je me sens stupide, tu as raison! Je devrais arrêter de mélanger les langues :) – Abel

Questions connexes