【问题标题】:How to Test C# Functions interactively with F# Interactive如何使用 F# Interactive 以交互方式测试 C# 函数
【发布时间】:2011-05-15 19:15:10
【问题描述】:

我有一组静态实用程序方法,包括单元测试。但是我希望有一种更具交互性的方式来使用测试 -> 修复 -> 编译周期(REPL),就像在 Lisp 或 Smalltalk 中一样,人们可以在交互模式下立即执行代码。我尝试使用 F# Interactive 直接在 VS 2010 中打开的 C# 项目中测试这些方法,但没有成功。

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

【问题讨论】:

  • 什么不起作用?听起来您正在拼写问题中的正确答案?
  • 嗨,布赖恩! - 唉,不。我猜问题是#r指令不能用来加载具有完整路径的任意dll,而只能加载GAC的程序集或搜索路径中的程序集。所以我得出的结论是我做错了什么,必须有另一种方法可以在打开的项目中使用 F# Interactive。我应该更简单、更精简...更具交互性,就像在“即时”窗口中一样。

标签: c# visual-studio-2010 f# read-eval-print-loop f#-interactive


【解决方案1】:

您需要使用#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 = ()

所以它确实有效,你只需要先编译你的项目。请记住重置您的会话以提前释放您的程序集。

【讨论】:

  • 嗨杰夫!我会尽快检查您的解决方案。终于有人知道了……唉,VS2010 团队中没有人想用 F# 推动 REPL 编码,它本来就很有价值……(+1)
  • 在完整路径前加上@,这样反斜杠就不会被视为转义字符,例如#I @"c:\users\myself\projects\FizzBuzz\bin\x86\Debug\";;
猜你喜欢
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多