Comment faire pour rediriger la sortie standard d'un projet C# de fichier à l'aide de Visual Studio “arguments de ligne de commande” option
Je suis en train de rediriger la sortie d'un programme C# dans un fichier. Lors de l'utilisation de "cmd.exe" je peux simplement de l'exécuter avec myprogram.exe arg1 arg2 > out.txt
, mais j'aimerais faire la même chose à l'aide de Visual Studio Options de Démarrage.
J'ai créé un C# Projet Vide et a ajouté ce code:
using System;
class Test
{
public static void Main(string[] args)
{
foreach (var arg in args) Console.WriteLine(arg);
}
}
Puis j'ai édité le arguments de ligne de commande dans les Paramètres du Projet:
L'exécution du projet avec Ctrl+F5 ne fonctionne pas comme prévu. Je reçois les arguments de ligne de commande imprimé sur la console, et pas dans le fichier de sortie:
arg1
arg2
>
output.txt
Si je change les arguments de ligne de commande à: arg1 arg2 "> output.txt"
j'obtiens le résultat suivant:
arg1
arg2
^> output.txt
J'ai remarqué qu'un vide output.txt
fichier est créé dans le dossier de Sortie.
Est-ce possible d'accomplir, ou suis-je obligé de continuer à l'utiliser cmd.exe pour le lancement de mon programme?
- Cela ne peut être fait pour les projets C#, mais, comme vous le savez sans doute) de faire exactement cela fonctionne pour les projets C++. Je ne sais pas pourquoi VS ne se comportent pas de façon uniforme. Je pense que c'est juste général de Microsoft manque de polonais et de la coordination entre les équipes.
Vous devez vous connecter pour publier un commentaire.
Au sens strict, vous êtes obligé d'utiliser l'invite de commande pour démarrer le programme avec redirigé sortie. Sinon, vous devez analyser la ligne de commande vous-même, l'interface graphique shell peut pas le faire.
Si vous voulez juste pour rediriger la sortie lorsque vous
Start Debugging
, puis décochez la case à cocher deEnable the Visual Studio hosting process
, vous avez terminé.Si vous n'avez pas, et le
"output.txt"
vous avez vu il y a, en fait, est pas générées par votre application, mais"YourApplication.vshost.exe"
qui est engendré avant de commencer à déboguer, par l'IDE de Visual Studio. Le contenu n'est toujours vide, et ne peut pas être écrit; car il est verrouillé par le Processus D'Hébergement.Cependant, si vous souhaitez que l'application se comporte de la même quel que soit le mode de démarrage, les choses sont plus complexes.
Lorsque vous démarrer le débogage de l'application, il est lancé avec:
parce que la production est déjà redirigé par l'IDE.
Et quand vous
Start Without Debugging
, il est lancé avec:C'est le bon moyen pour que votre application obtient tous les arguments que vous avez spécifié.
Vous pouvez avoir un coup d'oeil à ma réponse précédente de Comment puis-je détecter si "Appuyez sur n'importe quelle touche pour continuer . . ." s'affiche?.
Ici, je suis en utilisant une approche comme atavique retour dans le code ci-dessous:
Code de l'application
Nous avons également besoin de code suivant afin qu'il puisse fonctionner:
Code des méthodes d'extension
Depuis le parent serait IDE de Visual Studio(actuellement nommé
"devenv"
) lorsque nous avons le débogage. Les parents et les processus, en fait, sont divers, et nous aurions besoin d'une règle pour effectuer quelques vérifications.La partie la plus délicate est que l'enfant est celui qui fonctionne vraiment dans
Main
. Le code de vérification pour les grands-parents de processus chaque fois qu'il exécute. Si les grands-parents estnull
alors qu'il engendre, mais le processus engendré serait%comspec%
, qui est également la mère du nouveau processus, il va commencer avec le même exécutable de courant. Ainsi, si les grands-parents sont les mêmes que lui-même, alors il ne pourra pas continuer à frayer, passe juste enMain
.La Constructeur Statique est utilisé dans le code, qui est commencé avant
Main
. Il est répondu à la question sur DONC: Comment un constructeur statique de travail?.Lorsque nous avons commencer à déboguer, nous sommes le débogage des grands-parents(qui engendre). Pour le débogage avec le petit-fils de processus, j'ai fait
Debugger.Launch
avec une compilation conditionnelle qui invoqueraMain
, pour garderMain
clair.Une répondu à la question sur le débogueur serait également utile: Attacher le débogueur en C# pour un autre processus.
Start Without Debugging
dans vs2017. Je viens de faire un test(à nouveau) avec ma réponse, et il fonctionne toujours dans les deux cas (debug/non-debug) sans l'inexistant à la présente option impliqués. Juste à l'appliquer et vous ressentirez la magie.Je ne sais pas si cela peut être fait dans Visual Studio. Ma solution serait de définir une nouvelle sortie de la console. Cet exemple est à partir de la MSDN:
http://msdn.microsoft.com/en-us/library/system.console.setout.aspx
Dans la section Options de Démarrage, le changement de vos arguments de ligne de commande zone de texte de cette façon
Cette redirige la sortie standard (1) création d'un fichier nommé output.txt
Si vous voulez ajouter à une version précédente du fichier en écriture
Maintenant, vous pouvez déboguer le programme étape par Étape, tandis que la sortie de la console est redirigé
1>output.txt
dans la fenêtre de la Console.>output.txt
ne pas travail... Attendez {edit} ne fonctionne Toujours pas... HmmCtrl-F5
.Analyze -> Start performance analysis
mais je suppose que c'est toujours possible en utilisant la ligne de commande pour le profil c' (en quelque sorte).>
en place de>
Je voudrais suggérer une meilleure façon sans avoir besoin d'écrire aucun code!
Juste config visual studio pour commencer votre programme comme un programme externe.
Vous pouvez ouvrir le
.csproj.user
dans un éditeur externe et modifier leStartArguments
à partir de:à
vous allez continuer à l'utiliser cmd.exe si vous voulez tuyau de sortie à un fichier. le arguments de ligne de Commande: est pour les arguments de ligne de commande, donc tout ce que vous essayez seront échappés d'être un argument de ligne de commande. Les tuyaux et les redirecteurs ne sont pas des arguments de ligne de commande, donc ils se sont échappés.
Je voudrais juste créer un .fichier bat qui appelle le programme comme je les aime. Vous pouvez épingler qu'à la barre des tâches et simplement de l'exécuter.
La manière la plus simple est:
Clic droit sur le Projet => Propriétés ==> Debug
Et assurez-vous d'exécuter votre programme dans mode Debug.