我想要一种简单的交互式方式来演示我的应用程序的中间层功能,但尚未创建用户界面。我想要一个交互式控制台。
当我的应用程序(WPF但无关紧要)启动时,我想启动一个控制台窗口。这个窗口应该运行powershell(或ruby,或python,但最好是powershell),并将其范围设置为访问我的ServiceLocator。
或者,我可以启动我的应用程序并从外部PowerShell窗口附加到进程appdomain并获取对ServiceLocator的引用。这甚至可能吗?
无论如何,我之前已经创建了IronRuby引擎并在范围中设置了变量,但是如果我走这条路线,我需要基本上创建自己的控制台输入/显示机制。
有没有人知道更好的方法呢?
答案 0 :(得分:2)
您可以使用PowerShell的ConsoleShell
类似的东西:
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为您提供输入/输出机制,包括选项卡完成和命令行界面的其他功能。
答案 1 :(得分:1)
任何Windows应用程序都可以通过调用Windows AllocConsole
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
答案 2 :(得分:0)
我已经非常喜欢Visual Studio的立即窗口,我可以在调试时简单地键入赋值或调用函数。它显然不是你想要的,但如果你或其他读者不知道它,它肯定是非常有用的。
答案 3 :(得分:0)
答案 4 :(得分:0)
June 20 episode of the CodeCast podcast采访了Iron Python团队的Jimmy Schementi,他在Silverlight中谈到了IronPython Interactive DLR控制台。这是演示网站:http://ironpython.net/ironpython/browser/examples/dlrconsole/