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

Thomas -  
Mr_Evil_Duck Messages postés 45 Statut Membre -
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 !

1 réponse

  1. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    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
    0
    1. Thomas
       
      Merci beaucoup Xavier pour ta réponse rapide et détaillée, c'est bien cela que je cherchais !
      0
    2. Mr_Evil_Duck Messages postés 45 Statut Membre 2
       
      N'oublie pas de mettre la discussion en résolue =)
      0