2013-04-19 6 views
5

이 C# 코드를 EXE 파일로 컴파일하고 Windows 명령 셸에서 실행하면 잘 실행됩니다. 프롬프트를 출력하고, 일부 사용자 입력에 대해 동일한 줄에서 대기 한 다음 해당 입력을 반향합니다. PowerShell v3 셸에서 실행하면 정상적으로 실행됩니다. 그러나 PowerShell ISE V3에서이 동일한 EXE 파일을 실행하면 Write의 출력이 절대로 나오지 않고 ReadLine에 중단됩니다. (가 나중에 WriteLine 하였다 경우 제쳐두고, 그것은 Write 출력을 방출한다.)PowerShell ISE가이 C# 프로그램에서 멈춘 이유는 무엇입니까?

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      System.Console.Write("invisible prompt: "); 
      var s = System.Console.ReadLine(); 
      System.Console.WriteLine("echo " + s); 
     } 
    } 
} 

이는 ISE의 ​​버그 나 작동하도록 조절하는 몇 가지 특성이있다 ...?

+0

관련성이 있지만 Powershell에서 특정 문제를 구현할 수있는 * Keyboard Polling *이라고도합니다. 아마도 Console.ReadLine()이 폴링을 사용하여 Powershell로 인해 호출되었을 때 충돌을 야기했을 수 있습니다. – Greg

답변

4

ISE는 console 클래스를 지원하지 않습니다.

  • 에서 [콘솔] 클래스 없음 지원, [콘솔] 시도 ::의 backgroundColor = '화이트'. 일반적으로
    • , 스크립트는 호스트 API의 (쓰기 호스트 대신 [콘솔] 클래스의 , 그들은 모두에서 작동하도록 콘솔, ISE, 원격 및 다른 쉘을 사용해야합니다.

참조 : http://blogs.msdn.com/b/powershell/archive/2009/04/17/differences-between-the-ise-and-powershell-console.aspx

+0

Andy : 내가 물어봐야 할 질문이 답에 달려 있다는 것을 알게되었습니다 : 해결 방법/설정/등이있는 경우. 이 질문은 좋은 것입니다,하지만 당신이 지적한 이후로 _not_가 아니라면 더 나은 질문은 다음과 같아야합니다 : 콘솔을 사용하지 않고 ISE에서 C#으로 입력을 읽을 수있는 방법이 있습니까? _ 그러나 그 사실을 알지 못했습니다. 선험적으로. 어쨌든, 질문에 답한대로 체크 표시를합니다 - 감사합니다! –

+0

좋은 질문이 될 것입니다 @msorens, 당신은 그것을 요청해야합니다. –

0

파워 쉘 읽기 호스트 콘솔에서 읽을 당신은 C#을 내에서 읽기 호스트를 실행할 수 있습니다 C 번호는 탕에 대한 섹션에 MSDN에 설명되어 있습니다에서 PS 명령을 실행.. ershell 호스팅. 다음은 Powershell 스크립트를 사용하는 메서드 호출을 보여줍니다. C#으로 쉽게 변환 할 수 있어야합니다. $ 호스트는 C# 프로그램에 전달되어야합니다.

[powershell]::create().AddScript('param($ho) $ho.ui.readline()').AddArgument($host).Invoke() 
4

로 (독립 프로그램으로 EXE를 호출 대) MyClass에] :: 홈페이지 ($ 호스트) : 따라서 당신은 ISE 내에서 어셈블리로 C# 프로그램을로드하고 같은 홈페이지()를 호출해야 할 것 .\ConsoleApplication1.exe 전화 대신 start .\ConsoleApplication1.exe 을 호출하면 powershell ise에서 해결 방법이 적용됩니다. 이렇게하면 새 명령 프롬프트에서 응용 프로그램이 시작되어 stdin에서 입력을 받아들입니다.

+0

+1 편리한 해결 방법입니다 - 제안 해 주셔서 감사합니다! –