8

J'ai un ensemble de méthodes d'utilitaires statiques incluant des tests unitaires. Mais j'aimerais avoir un moyen plus interactif d'utiliser un cycle de test -> fixation -> de compilation (REPL) comme dans Lisp ou Smalltalk où l'on peut immédiatement exécuter du code en mode interactif. J'ai essayé d'utiliser F # Interactive pour tester ces méthodes directement à partir du projet C# ouvert dans VS 2010, mais je n'ai pas réussi à le faire fonctionner.Comment tester les fonctions C# de manière interactive avec F # Interactive

Je sais que je dois charger l'assembly (directive #r), ouvrir l'espace de nom et ensuite appeler les méthodes (et inspecter le résultat). Mais comment le faire dans "F # Interactive" dans Visual Studio 2010? Je sais que c'est possible avec la fenêtre "Immediate" disponible en mode debug, mais je veux le faire dans F # Interactive en "mode design", quand j'écris le code.

+1

Qu'est-ce qui ne fonctionne pas? Il semble que vous épelez la bonne réponse dans la question? – Brian

+0

Hey Brian! - Hélas non. Je suppose que le problème est que la directive #r ne peut pas utiliser pour charger des DLL arbitraires avec un chemin complet, mais seulement les assemblys GAC ou ceux dans les chemins de recherche. Je suis donc arrivé à la conclusion que je fais quelque chose de complètement faux, et il doit y avoir une autre façon d'utiliser F # Interactive dans le projet ouvert. Je devrais être plus facile, plus léger ... plus interactif comme dans la fenêtre Exécution. – Nico

Répondre

10

Vous devez inclure le chemin d'accès à votre projet en utilisant la directive #I, vous pouvez ensuite charger votre assemblage et l'utiliser. J'ai écrit une simple application de console C# essayer ceci et cela a fonctionné.

using System; 

namespace ConsoleApplication1 
{ 
    public class Program 
    { 
     static void Main(string[] args) 
     { 
      PrintMessage(); 
      Console.Write("Press any key to continue . . . "); 
      Console.ReadKey(true); 
      Console.WriteLine(); 
     } 

     public static void PrintMessage() 
     { 
      Console.WriteLine("MESSAGE!"); 
     } 
    } 
} 

Puis, en F # interactive:

> #I "full path to debug directory";; 

--> Added 'full path to debug directory' to library include path 

> #r "ConsoleApplication1.exe";; 

--> Referenced 'full path to debug directory\ConsoleApplication1.exe' 

> open ConsoleApplication1;; 
> Program.PrintMessage();; 
MESSAGE! 
val it : unit =() 

Il fonctionne vraiment, il vous suffit de compiler vos premiers projets. N'oubliez pas de réinitialiser votre session pour libérer votre assembly à l'avance.

+1

Salut Jeff! Je vais vérifier votre solution dès que possible. Enfin quelqu'un avait une idée ... Hélas personne dans l'équipe VS2010 ne voulait pousser le codage REPL avec F #, cela aurait été si précieux ... (+1) – Nico

+1

Préfixe le chemin complet avec @ donc la barre oblique inversée ne sera pas traitée en tant que caractère d'échappement, p.ex. '#I @" c: \ users \ moi \ projets \ FizzBuzz \ bin \ x86 \ Debug \ ";;' –