0

我想要一种简单的交互式方式来演示尚未创建 UI 的应用程序的中间层功能。我想要一个交互式控制台。

当我的应用程序(WPF 但没关系)启动时,我还想启动一个控制台窗口。此窗口应运行 powershell(或 ruby​​ 或 python,但最好是 powershell)并将其范围设置为访问我的 ServiceLocator。

或者,我可以启动我的应用程序并从外部 powershell 窗口附加到进程 appdomain 并获取对 ServiceLocator 的引用。这甚至可能吗?

无论如何,我之前已经创建了 IronRuby 引擎并在范围内设置了变量,但是如果我走这条路,我基本上需要创建自己的控制台输入/显示机制。

有谁知道更好的方法来解决这个问题?

4

5 回答 5

2

您可以使用ConsoleShellPowerShell。
就像是:

using System.Management.Automation;
using System.Management.Automation.Runspaces;
...
RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create();
runspaceConfiguration.Cmdlets.Append(...);
ConsoleShell.Start(runspaceConfiguration, Console.Title, Console.Title, new string[] { });
...

这将在您的进程中启动 PowerShell,您可以访问您的变量、添加与您的应用程序交互的 cmdlet 等。ConsoleShell 为您提供输入/输出机制,包括制表符完成和命令行界面的其他功能。

于 2013-06-13T12:04:54.033 回答
1

AllocConsole任何 Windows 应用程序都可以通过调用 Windows API 函数来创建控制台。不幸的是,.NET Console 类没有公开该功能。几年前,我写了一系列文章和一些代码来扩展 .NET 控制台界面并包含AllocConsole支持。不幸的是,DevSource 似乎丢失了该系列的第一篇文章。

这是您需要的两个功能:

[DllImport("kernel32.dll", SetLastError=true)]
public static extern bool AllocConsole();

[DllImport("kernel32.dll", SetLastError=true)]
public static extern bool FreeConsole();

您可以从我的网站下载完整的扩展控制台支持包:http: //mischel.com/pubs/consoledotnet.zip

于 2010-07-09T20:22:34.560 回答
0

我越来越喜欢 Visual Studio 的即时窗口,在那里我可以在调试时简单地键入赋值或调用函数。这显然不是你要找的,但如果你或其他读者不知道它,它肯定是非常有用的。

于 2010-07-09T20:21:00.410 回答
0

看看这篇文章:PowerShellTunnel - 在运行时从 PowerShell 编写您的应用程序

于 2010-07-09T20:24:22.383 回答
0

CodeCast播客 6 月 20 日的一集中采访了 Iron Python 团队的 Jimmy Schementi,他谈到了 Silverlight 中的 IronPython 交互式 DLR 控制台。这是演示站点:http: //ironpython.net/ironpython/browser/examples/dlrconsole/

于 2010-07-09T23:02:52.800 回答