我可以在不编译整个项目的情况下从即时窗口调用C#函数吗?

问题描述 投票:-2回答:1

回到我的VB6时代,即使我的其余代码处于损坏状态,我也可以使用即时窗口对功能进行快速健全性测试:

enter image description here

对于快速而肮脏的REPL调试非常方便。

在Visual Studio中编写C#代码时,除非其中的all有效且可以编译,否则我无法从“即时窗口”中调用我的代码的[[any。

当我的项目处于准备运行状态时,这很好用,但是当我正在分解一堆代码时,效果不佳。

有什么方法可以将即时窗口配置为仅编译我要执行的语句所需的内容?或其他解决方法?

我听说LINQPad非常棒,但是我认为它需要我复制并粘贴测试语句所依赖的所有代码,然后才能运行它。我也玩过较新的“交互窗口”,但认为它不能满足我的需求。

c# visual-studio visual-studio-debugging read-eval-print-loop immediate-window
1个回答
4
投票
从上面的评论中,您已经迷失了答案:C#交互式窗口(View | Other Windows | C# Interactive)是所需的功能。如果由于现有项目错误,立即窗口无法运行您要运行的代码,则C#Interactive将运行。实际上,Visual Studio的C#交互式窗口的工作方式与VB6的“即时窗口”的工作方式相同。 C#Interactive窗口将成功编译并运行不依赖于错误状态项目代码的代码:

enter image description here

[就像在VB6中一样,您将无法从未编译的项目代码中访问函数或变量-正如其他人所指出的那样,如果它必须依赖于无法编译的代码?就像我上面的图像所证明的那样,只要您提供给C#Interactive窗口的代码是可编译的,即使您的项目代码不起作用,它也将起作用。

enter image description here

只要您避免使用任何可能依赖于项目代码的代码,您甚至可以编译更复杂的示例,如下所示:

但是,与VB6的即时窗口(这是Visual Studio的即时和Visual Studio的C#/ F#交互式窗口的仅VB混合形式)不同,您不能引用项目代码中存在的值,因为C#/ F#交互式窗口是沙盒。因此,在所示示例中,无论项目是否存在编译错误,我都无法访问C#Interactive窗口中的ggc.Name-该窗口无权访问任何项目变量或状态。

© www.soinside.com 2019 - 2024. All rights reserved.