Самый простой способ получить интерактивную консоль для моего приложения - PullRequest
0 голосов
/ 10 июля 2010

Я хочу простой, интерактивный способ демонстрации функций среднего уровня моего приложения, для которых еще не создан пользовательский интерфейс. Я хочу интерактивную консоль.

Когда мое приложение (WPF, но это не должно иметь значения) загружается, я хотел бы также запустить окно консоли. Это окно должно запускать powershell (или ruby, или python, но предпочтительно powershell) и иметь область действия для доступа к моему ServiceLocator.

С другой стороны, я мог бы запустить свое приложение и присоединиться к домену приложения процесса из внешнего окна powershell и получить ссылку на ServiceLocator. Это вообще возможно?

В любом случае, я создавал движки IronRuby и устанавливал переменные в областях раньше, но если бы я пошел по этому пути, мне нужно было бы по сути создать свой собственный механизм ввода / вывода консоли.

Кто-нибудь знает лучший способ сделать это?

Ответы [ 5 ]

2 голосов
/ 13 июня 2013

Вы можете использовать ConsoleShell PowerShell.
Что-то вроде:

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 в вашем процессе, и вы сможете получить доступ к переменным, добавить командлеты, которые взаимодействуют с вашим приложениемтак далее'.ConsoleShell предоставляет вам механизм ввода / вывода, включая завершение табуляции и другие функции интерфейса командной строки.

1 голос
/ 10 июля 2010

Любое приложение Windows может создать консоль, вызвав функцию Windows AllocConsole API.К сожалению, класс .NET Console не предоставляет эту функциональность.Несколько лет назад я написал серию статей и код для расширения интерфейса .NET Console и включил поддержку 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

0 голосов
/ 10 июля 2010

В эпизоде ​​ 20 июня подкаста CodeCast состоялось интервью с Джимми Шементи из команды Iron Python, в котором он рассказал об интерактивной консоли IronPython DLR в Silverlight.Вот демонстрационный сайт: http://ironpython.net/ironpython/browser/examples/dlrconsole/

0 голосов
/ 10 июля 2010
0 голосов
/ 10 июля 2010

Я полюбил Immediate-окно Visual Studio, где я могу просто вводить назначения или вызывать функции во время отладки.Это явно не то, что вы ищете, но если вы или другие читатели не знаете об этом, это, безусловно, очень полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...