1

私は非常に単純なプログラムを持っています:

using System;
using System.Windows.Forms;
using System.Text;
using System.IO;

namespace NS
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            try
            {
                Console.SetIn(new StreamReader(Console.OpenStandardInput(2000)));
                //get some content using Console.ReadLine() and prompting using Console.WriteLine();
                string HTML =
                string.Format(@"HTML redacted", someFormatString, w/e);
                Clipboard.SetText(HTML);
                Console.ReadKey(true);
                string JS = string.Format(@"JS redacted", someFormatString, w/e);
                Clipboard.SetText(JS);
                Console.WriteLine("Press any key to continue...");
                Console.ReadKey(true);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
    }
}

補足: はい、メインの周りに try/catch をラップするのは好ましくないことはわかっていますが、今はデバッグの目的で必要です。

私はすべての適切なアセンブリを参照しています。csproj のアセンブリ参照は次のとおりです。

<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />

ただし、エクスプローラーからロードしようとすると、0xc000142 が表示されます。意味がわからないけど。

ただし、CMDからロードすると完全に機能します。

何か案は?参照を追加し、System.Windows Clipboard クラスに変更し、新しいプロジェクトを作成してコードをコピーしようとしましたが、何も効果がありませんでした。

編集:これは明確ではないようです:これはフォームでクリップボードクラスを使用する必要があるコンソールアプリです。Forms/CLI アプリになろうとしているわけではありません。

4

2 に答える 2

2

コメントの後に編集:

お使いのマシンに問題があるようです。これは私のテスト プログラムのリリース ビルドで、私のマシンで実行されます。実行できない場合は、.net のインストールが破損しているか、そのようなことが起こっています。別のコンピューターでも試してみることをお勧めします。

それは.net 4.5 btwです。

他の誰かがそれが機能することを確認できれば、私は頭がおかしくないので、それは素晴らしいことです:)

http://23.23.250.9/ClipboardInConsole.zip

クリップボードが機能するためには、参照するだけでよいことに注意してください

System
System.Windows.Forms

他のすべてが何のために必要なのかはわかりませんが、クリップボードだけでは、これら 2 つで十分です。プロジェクトは引き続きビルドおよび実行されます。幸運を!


私の元の答え:

正しく動作するには、シングル スレッド アパートメント モードである必要があります。次の属性を追加すると、機能するはずです。この回答は、OP編集が質問に[STAThread]を追加する前に投稿されたことに注意してください。

    [STAThread]
    static void Main(string[] args)

注: catch ブロック内に を追加すると、Console.ReadKey();そのエラーが表示されます。また、System.Windows.Forms への参照のみが必要です。

注 2:それでも機能しない場合は、表示されていない別のエラーが発生しています。Catch{} ブロック内に Console.ReadKey() を追加するという私の提案を試して、例外を確認してください。

コンパイルして動作する私の(あなたの)完全なコード:

using System;
using System.Windows.Forms;
using System.Text;
using System.IO;

namespace NS
{

    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            try
            {
                Console.SetIn(new StreamReader(Console.OpenStandardInput(2000)));
                //get some content using Console.ReadLine() and prompting using Console.WriteLine();
                string HTML = "<html>";
                //string.Format(@"HTML redacted", someFormatString, w / e);
                Clipboard.SetText(HTML);
                Console.ReadKey(true);
                string JS = "JS { }";//string.Format(@"JS redacted", someFormatString, w / e);
                Clipboard.SetText(JS);
                Console.WriteLine("Press any key to continue...");
                Console.ReadKey(true);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                Console.ReadKey();
            }
        }
    }
}
于 2013-03-12T19:13:39.083 に答える
0

いくつかのオプションがあります。

1) Visual Studio を管理者モードで実行してみてください。VS アイコンを右クリック -> 管理者として実行します。これがうまくいくかどうか教えてください。

2) プロジェクトの設定を確認し、「任意の CPU」を選択してビルドされていることを確認します。

于 2013-03-12T19:13:40.247 に答える