Я работаю над решением в Visual Studio 2010 Ultimate, которое содержит два проекта C #: проект Forms и консольный проект. Программно они полностью разделены; Основная часть обоих проектов может работать без другого. То, что я хотел бы сделать, это вызвать консольное приложение, нажав кнопку в приложении Forms, с определенными параметрами, установленными на основе приложения Forms. Таким образом, вы можете думать о приложении Forms как о «приложении запуска».
Способ, которым я сейчас это реализовал, заключается в использовании System.Diagnostics.Process.Start
с "cmd"
в качестве первого параметра и пути к исполняемому файлу консольного приложения (плюс аргументы CLI) в качестве второго параметра. Но это ужасное решение, потому что оно сломается при развертывании на других машинах с установщиком.
Я также пытался создать ссылку на консольный проект в объекте Forms, сделать Program
в консольном проекте общедоступным и статическим и вызвать метод Main
консольного проекта, но поскольку нет действительного дескриптора вывода, в конечном итоге это вызывает исключение.
Я много гуглил, некоторые искали здесь на SO и даже проверяли «Похожие вопросы» на странице представления, и никто, кажется, не знает, как делать то, что я хочу делать. Любые указатели, которые могут поставить меня на правильный путь?
К вашему сведению: я знаю, что есть, вероятно, десять миллионов лучших способов сделать это, но у меня есть несколько причин желать и нуждаться в этом таким образом. Я знаю, что мог бы просто создать отдельный графический интерфейс для программы CLI и скопировать соответствующий код, или объединить все в один проект и создать отдельное окно вывода, или различные другие решения, подобные этим. Но мне нужно это решение по двум причинам: (1) у меня была довольно сложная программа CLI, которая хорошо работает как программа CLI, и теперь мне нужен удобный способ ее запуска, и (2) решение проблемы другими способами не не отвечаете на вопрос «Зачем вообще беспокоиться о том, чтобы в одном и том же решении было несколько исполняемых проектов, если вы не можете вызвать один из другого?»