在调试c#时,Visual Studio 2012中是否有一种方法可以使用F#REPL?

如果我在ac#程序中有断点,我很乐意使用F#REPL来检查我的代码。 这有可能吗?

您应该能够使用F#REPL调试C#项目 – 我在调试F#库项目时这样做,但C#应用程序/库也可以工作(我认为)。

编译你的C#项目。 在F#interactive中,使用#r指令引用C#程序集(请参阅ArthurFSharp的post)。 在C#代码中的某处插入断点。

在Visual Studio中,转到“ Tools – >“ Attach to Process 。 在进程列表中找到Fsi.exe并双击它; 如果你没有在那里看到它,请确保已启动Fsi进程(只需在F#Interactive窗口内单击即可)。

在F#Interactive中,执行一些能够到达您设置的断点的代码; 调试器应该像你想要的那样在断点上停止执行。 只要调试器没有在某个断点上停止,您也可以从FSI中执行其他代码,例如更改正在运行的C#应用​​程序中的设置。

重要提示:请记住,只要将程序集加载到进程中,Windows就会锁定程序集。 这意味着只要FSI打开,您将无法重新编译C#应用程序! 修复很简单 – 一旦您对C#应用程序进行了一些更改并想要重新编译并再次开始测试,只需在F#Interactive窗口中右键单击并在上下文菜单中单击“重置交互式会话”。 该过程将被终止并重新启动,因此您可以重新开始。 (如果忘记重新启动FSI进程并尝试重新编译应用程序,编译将花费比平常更长的时间,那么您将收到一条错误消息,告诉您编译器无法写入输出文件。)

您需要使用#I指令包含项目的路径,然后您可以加载程序集并使用它。 然后加载程序集(#r指令),打开命名空间,然后可以调用方法(并检查结果)。

例如 :

 using System; namespace ConsoleApplication1 { public class Program { static void Main(string[] args) { PrintMessage(); } public static void PrintMessage() { Console.WriteLine("Hello World!"); } } } 

在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();; Hello World! val it : unit = () 

ps:需要先编译你的项目。