2013-04-19 10 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:あなたは私が質問していたはずの質問が答えに依存していることを実感しました:回避策/設定/などがあった場合。この質問はそれなりに良いでしょうが、あなたはそこに問題がないと指摘しているので、より良い質問は、コンソールを使わずにISEからC#の入力を読む方法がありますか?_しかし、私はそれを知らなかったアプリオリ。とにかく、尋ねられたように答えましたので、チェックマークを付けました - ありがとう! –

+0

それは良い質問になるでしょう@msorens、あなたはそれを尋ねる必要があります。 –

0

PowerShellは、ホストを読むには、あなたがC#の中から、読み取りホストを実行できるコンソールから読み込みますのC#からPSコマンドを実行パウについてのセクションでMSDNに記載されています。 ershellホスティング。以下はPowershellスクリプトを使ったメソッド呼び出しを示しています.C#に変換するのは簡単です。 $ hostはC#プログラムに渡さなければならないことに注意してください。

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

として(スタンドアロンプ​​ログラムとしてEXEを呼び出す対)[MyClassの] ::メイン($ホスト):したがって、あなたはISE内のアセンブリとしてC#のプログラムをロードするなどメインを()を呼び出す必要があるだろう.\ConsoleApplication1.exeを呼び出す代わりに、powershell iseの回避策を呼び出すstart .\ConsoleApplication1.exe これは、新しいコマンドプロンプトでアプリケーションを起動し、stdinからの入力を受け入れます。

+0

+1それは便利な回避策です - それを提案してくれてありがとう! –

関連する問題