8

我有一组静态工具方法,包括单元测试。但我希望有一种更具交互性的方式来使用测试 - >修复 - >编译循环(REPL),就像在Lisp或Smalltalk中那样,可以立即在交互模式下执行代码。我试图使用F#Interactive直接从VS 2010中打开的C#项目中测试这些方法,但我没有得到它的工作。如何使用F#Interactive交互式测试C#函数

我知道我必须加载程序集(#r指令),打开命名空间,然后可以调用方法(并检查结果)。但是,如何在Visual Studio 2010的“F#Interactive”中执行此操作?我知道可以在调试模式下使用“立即”窗口,但是我想在编写代码时在“设计模式”下​​在F#Interactive中执行此操作。

+1

什么不起作用?这听起来像你在问题中拼写出正确的答案? – Brian 2010-11-26 00:17:09

+0

嘿Brian! - 唉,不。我猜问题是#r指令不能用来加载具有完整路径的任意dll,但只能加载GAC的程序集或搜索路径中的程序集。所以我得出结论,我正在做一些完全错误的事情,并且在打开的项目中必须有另一种方法来使用F#Interactive。我应该更容易,更精简......在即时窗口中更具互动性。 – Nico 2010-11-26 16:40:29

回答

10

您需要使用#I指令来包含项目的路径,然后您可以加载程序集并使用它。我写了一个简单的C#控制台应用程序试试这个,并得到这个工作。

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!"); 
     } 
    } 
} 

然后在F#互动:

> #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 =() 

所以它肯定的作品,你只需要先编译项目。请记住重置会话以预先发布您的程序集。