29

我想知道是否有类似 Visual Studios“即时窗口”的独立版本?有时我只是想测试一些简单的东西,比如“DateTime.Parse(“blah”)”,看看它是否有效。但是每次我必须创建一个新的控制台应用程序时,输入我的代码并对其进行测试。

遗憾的是,即时窗口仅在我调试某些东西时才有效。PowerShell 能做到这一点吗?只需打开一个类似于 cmd.exe 的 CLI,允许我执行一些 C# 代码?

4

17 回答 17

33

Linqpad - 我一直都这样使用它。 http://www.linqpad.net/

不要被这个名字误导——它只是描述了它的原始动机,而不是它的功能。

就在最近,他发布了一个具有正确语句完成功能的版本——这是一个收费的附加组件(核心工具是免费的),但我认为只需少量的钱,而且非常值得。

于 2008-12-03T14:32:04.770 回答
12

Mono 项目包含一个交互式 C# shell,这可能正是您正在寻找的。

http://www.mono-project.com/CsharpRepl

于 2008-12-03T14:26:40.410 回答
12

C# 交互式窗口和csi.exe REPL 已添加到Visual Studio 2015 Update 1

介绍互动

交互式窗口又回来了!C# 交互窗口在 Visual Studio 2015 更新 1 中返回,同时还提供了一些其他交互功能:

  • C# 交互式. C# 交互式窗口本质上是一个读取-评估-打印-循环 (REPL),它允许您使用 .NET 技术进行游戏和探索,同时利用 IntelliSense、语法着色等编辑器功能。了解有关如何使用 C# 的更多信息在第 9 频道进行互动或阅读我们的初学者演练。

  • CSI _ 如果您不想打开 Visual Studio 来玩弄 C# 或运行脚本文件,可以从开发人员命令提示符访问交互式引擎。键入csi /path/myScript.csx以执行脚本文件,或仅键入csi以放入命令行 REPL。

  • 脚本 API。脚本 API 使您能够在主机创建的执行环境中执行 C# 代码片段。通过查看我们的代码示例,您可以了解有关如何创建自己的 C# 脚本引擎的更多信息。

请参阅.NET 托管语言的 Visual Studio Update 1 中的新增功能

基本上,现在你有:

  • IDE REPL — VS 中的 C# 交互窗口
  • 脚本解释器——csi foo.csx来自 Dev Cmd Prompt
  • 命令行 REPL —csi来自 Dev Cmd Prompt
  • 脚本 API
于 2015-12-01T23:43:54.853 回答
9

试试scriptcs,它没有集成到 VS IDE 中,但它确实允许您在脚本窗口中键入和运行 C#,而无需项目编译器等...

于 2013-06-06T17:52:33.577 回答
8

好吧,这不是您问题的直接答案,但是您可以查看此工具:

此外,如果您想查看生成的 IL 或类似内容,则有一个插入到Reflector的工具,称为Snippy,它基于 Jon 在他自己的答案中进一步提到的 Snippy 工具。

所有这些都非常好用。

于 2008-12-03T14:23:31.057 回答
7

正如你所建议的,PowerShell 可以做你想做的事。例如,要测试你的 DateTime.Parse,下面的一个衬里就可以了:

PS C:\Documents and Settings\Dan> [System.DateTime]::Parse("Blah")
使用“1”参数调用“Parse”的异常:“字符串未被识别为有效的 DateTime。有从索引 0 开始的未知单词。” 在 line:1 char:25 + [System.DateTime]::Parse(<<<< "Blah")

PS C:\Documents and Settings\Dan> [System.DateTime]::Parse("1/2/3")

2003 年 2 月 1 日 00:00:00

请注意,以上使用的是当前版本的 PowerShell (v1.0)。PowerShell 的下一个版本将允许您更直接地将 C# 与 PowerShell 脚本混合。为了激发您的胃口,请观看Doug Finke的 7 分钟截屏视频“ C# 到 PowerShell ” 。非常令人印象深刻!

于 2008-12-03T14:32:40.027 回答
4

如果您使用的是 Mono,则如下:

CsharpRepl

几年前, Don Box也破解了一些非常简单的东西。

于 2008-12-03T14:26:12.533 回答
4

按照 lassevk 的回答,我得到了"Snippy"。这是为 C# in Depth 开发的,UI 很垃圾,但它可以工作 - 并且还允许您编写额外的成员(方法、嵌套类等),例如

public static void Foo()
{ 
    Console.WriteLine("Hello");
}
...
Foo();

(... 用于告诉 Snippy “这里的所有内容都属于 Main”。)

于 2008-12-03T14:29:04.197 回答
3

我们刚刚发布了CShell一个功能齐全的 C# REPL IDE。它支持代码完成、脚本文件、添加引用,并且是真正可扩展的。此外,我们计划很快添加 NuGet 支持,这将使编写一些代码并查看它是如何工作的变得超级快。

http://cshell.net/

CShell 截图

我们喜欢 LINQPad,但它没有 REPL,代码只执行一次,除非您修改脚本并再次运行整个脚本,否则您无法对结果进行任何进一步的处理。这很好,但有时如果你想要更多的脚本感觉,那么在 REPL 中评估你的代码真的很好也很方便。

于 2013-06-06T17:47:30.517 回答
2

我还发现SharpDevelop非常快速和轻量级,它是快速启动测试项目的最简单方法。

于 2008-12-03T14:30:28.250 回答
1

您可能会发现 Object Test Bench 很有用。它不是很为人所知,但可以让您创建类的实例、执行静态方法等等。它对于发现如何使用不熟悉的 API 或快速调试您自己的类和方法很有用,无需创建测试工具以进行简单检查。

您可以在此处找到 MSDN 文档:

http://msdn.microsoft.com/en-us/library/c3775d98%28VS.80%29.aspx

于 2008-12-03T14:43:52.997 回答
1

如果你能等一会儿.. 看起来可能有一个 C# 相当于 Ruby 的 irb 及时用于 C# 4.0 Anders H. 演示了一个交互式控制台会话,您可以在其中键入任意 C# 代码并在他的“ C#的未来”中查看结果' 在 PDC 2008 上发表的文章。您甚至可以从中弹出一个 WPF 窗口,然后通过控制台界面使用它。很酷。

于 2008-12-03T16:39:10.567 回答
1

使用LINQPad

尽管有名称,它可以执行任何 C# 或 VB 代码,从简单的表达式到整个类。

另外,它可以在结果中可视化整个对象图。

您甚至可以添加对您自己的程序集的引用。

于 2009-06-19T17:47:57.907 回答
1

尝试作为O2 平台一部分的C# REPL 脚本环境。这正是您所要求的。

它将为您提供一个完美的环境来尝试所有 C# 功能和 API(从概念上讲,O2 REPL 环境类似于 LinqPAD)

您还应该看看 Microsoft 的 Roslyn。在多个基于 Roslyn 的工具上(均在 VisualStudio 之外独立运行),第一个是简单的 Roslyn REPL

于 2012-08-03T04:13:25.883 回答
0

如果您碰巧知道并喜欢 Python,那么IronPython可能是一个不错的选择。它带有一个 (Python) REPL 控制台 (ipy.exe),您可以在其中导入和使用所有 .Net 类型。

我发现它对于测试小东西很有用,就像DateTime.Parse("Blah").

请注意,它实际上不能执行 C# 代码,但如果您只想访问 .Net,那么它是完美的。此外,如果您安装了IronPython Tools for VS,您可以使用单个键盘快捷键 (Alt+I) 在 VS 中启动 REPL 会话,并在需要时让它在停靠窗口中运行。

于 2010-11-24T17:45:38.257 回答
0

更新:http ://avillenas.com/post/interactive-c

嗯,你可以试试这个。

  1. 下载并安装 dotnet.github.io
  2. 打开命令
  3. 输入“dotnet repl”
  4. 键入您需要的任何内容。

我做了你想做的事。点击这里查看 gif

于 2016-02-10T00:45:23.023 回答
0

Roslyn 项目源包含一个名为 CSI ( http://sourceroslyn.io/#csi/Csi.cs ) 的 REPL。Csi 类目前是内部的,但是对于“csi”项目 (Roslyn.sln: Interactive/Hosts/csi) 有一个可执行的控制台应用程序可用,它支持例如命令 #r 加载程序集和 #load 加载和执行脚本文件(启动 csi 并使用#help)。

于 2016-09-23T14:00:00.583 回答