Menu

Créer un ficher .exe d'une méthode VS C#

Thomas - 10 août 2018 à 15:15 - Dernière réponse : Mr_Evil_Duck 36 Messages postés vendredi 5 octobre 2018Date d'inscription 18 octobre 2018 Dernière intervention
- 11 oct. 2018 à 16:32
Bonjour à tous,

J'ai en ce moment un petit problème, je n'arrive pas à trouver de solution sur le net, alors voila :
J'ai un programme comprenant plusieurs méthodes, et j'aimerais pouvoir créer un executable pour lancer chacune de ces methodes en ligne de commande, le top serait même de pouvoir y passer des arguments. Quelqu'un aurait une idée de comment faire ? Je suis en C# sous visual studio 2013.
J'ai bien pensé faire un projet pour chaque méthode et utiliser le .exe dans Bin/Debug mais j'ai pas mal de réferences à importer et cela ne permet pas de passer d'arguments ... Et c'est aussi un peu crado !
Merci d'avance !
Afficher la suite 

Votre réponse

3 réponses

Reivax962 3267 Messages postés jeudi 16 juin 2005Date d'inscription 10 octobre 2018 Dernière intervention - 10 août 2018 à 15:59
0
Merci
Bonjour,

Avec visual studio, un projet = un exécutable.
Par contre, tu peux avoir un seul exécutable mais dont le premier argument définisse la fonction à appeler.
Par exemple pour une calculatrice, tu aurais un exécutable operation.exe qui pourrait être appelé comme ceci :
> operation.exe --addition 1 4

La syntaxe en question est entière libre, c'est toi qui la définis. Comment ? Tout se passe dans ta classe Program, fonction Main. Regarde les paramètres qu'elle porte :
Main(string[] args)
. Que contient le tableau "args" ? Il contient justement les paramètres additionnels fournis lors de l'appel du programme, séparés par des espaces et prenant en compte les éventuels guillemets.
Dans l'exemple du dessus, args contient donc ["--addition", "1", "4"] (sous forme de chaînes de caractères).

C'est donc toi qui dois définir les options possibles et, en fonction des arguments, appeler telle ou telle méthode.

Voici une calculatrice très rudimentaire :
using System;

namespace Calculatrice
{
    class Program
    {
        private enum Operations {Addition, Soustraction, Multiplication, Division}
        private static Operations _operation;
        private static double _op1, _op2;

        static void Main(string[] args)
        {
            if (!CheckArgs(args))
                Help();
            else
            {
                switch (_operation)
                {
                    case Operations.Addition:
                        Console.WriteLine("{0} + {1} = {2}", _op1, _op2, _op1 + _op2);
                        break;
                    case Operations.Soustraction:
                        Console.WriteLine("{0} - {1} = {2}", _op1, _op2, _op1 - _op2);
                        break;
                    case Operations.Multiplication:
                        Console.WriteLine("{0} x {1} = {2}", _op1, _op2, _op1 * _op2);
                        break;
                    case Operations.Division:
                        Console.WriteLine("{0} / {1} = {2}", _op1, _op2, _op1 / _op2);
                        break;
                    default:
                        throw new ArgumentOutOfRangeException();
                }
            }
        }

        private static void Help()
        {
            Console.WriteLine("Usage : calculatrice.exe op op1 op2");
            Console.WriteLine("op peut valoir :");
            Console.WriteLine("  a, +, addition : génère une addition");
            Console.WriteLine("  s, -, soustraction : génère une soustraction");
            Console.WriteLine("  m, x, *, multiplication : génère une multiplication");
            Console.WriteLine("  d, /, division : génère une division");
            Console.WriteLine("op1 et op2 sont les opérandes.");
        }

        private static bool CheckArgs(string[] args)
        {
            if (args.Length == 0)
                return false;
            switch (args[0])
            {
                case "/?":
                    return false;   // Pour afficher l'aide
                case "a":
                case "+":
                case "addition":
                    _operation = Operations.Addition;
                    break;
                case "s":
                case "-":
                case "soustraction":
                    _operation = Operations.Soustraction;
                    break;
                case "m":
                case "x":
                case "*":
                case "multiplication":
                    _operation = Operations.Multiplication;
                    break;
                case "d":
                case "/":
                case "division":
                    _operation = Operations.Division;
                    break;
            }
            if (args.Length < 3)
                return false;
            try
            {
                _op1 = double.Parse(args[1]);
                _op2 = double.Parse(args[2]);
            }
            catch
            {
                return false;
            }
            return true;
        }
    }
}


Après on peut faire des choses bien plus complexes en utilisant des syntaxes d'arguments telles que /o=add, etc. Tu fais ce que tu veux mais c'est à toi de le coder ;)
Quelque chose de sympa aussi, c'est de penser à autoriser le /? qui va afficher la syntaxe attendue. C'est standard.

Xavier
Merci beaucoup Xavier pour ta réponse rapide et détaillée, c'est bien cela que je cherchais !
Mr_Evil_Duck 36 Messages postés vendredi 5 octobre 2018Date d'inscription 18 octobre 2018 Dernière intervention - 11 oct. 2018 à 16:32
N'oublie pas de mettre la discussion en résolue =)
Commenter la réponse de Reivax962