0

3 つのプロジェクトで構成される単純なテスト ソリューションを作成しました。

  • 最初のプロジェクトは、メソッド void DoSomething() を持つインターフェイス ITest を含むクラス ライブラリです。
  • 2 番目のプロジェクトは、ITest を実装するクラス Test を含むクラス ライブラリでもあり、DoSomething では Console.WriteLine を実行するだけです。
  • 3 番目のプロジェクトは、動的アセンブリの読み込みを使用して ITest インターフェイスを介して Test クラスを読み込み、インスタンス化する Forms アプリケーションです。

ソースコードは次のとおりです。

public interface ITest
{
    void DoSomething();
}

----------------------------------------------

public class Test : ITest
{
    public void DoSomething()
    {
        Console.WriteLine("I've done something...");
    }
}

----------------------------------------------

static class Program
{
    [STAThread]
    static void Main()
    {

        String[] files = Directory.GetFiles(Directory.GetCurrentDirectory(), "LibraryTest.dll");
        Assembly assembly = Assembly.LoadFile(files[0]);
        Type typeToStart = null;
        foreach (Type t in assembly.GetTypes())
        {
            if (t.GetInterfaces().Contains(typeof(ITest)))
            {
                typeToStart = t;
            }
        }

        ITest test = (ITest)Activator.CreateInstance(typeToStart);
        test.DoSomething();

        Console.WriteLine("Finished");
    }
}

Test クラスを含む LibraryProject でフォーム アプリケーション プロジェクトを参照し、Debug の下のプロジェクト プロパティで [Start external program] を選択して、ライブラリ デバッグ フォルダーからフォーム アプリケーションを開始します。

デバッグ設定

予想どおり、ライブラリ プロジェクトを実行できるようになりました。これにより、フォーム アプリケーションが出力フォルダー内から外部プログラムとして開始されます。そこで、フォームはライブラリ dll を見つけて dynamicall をロードし、Test クラスで DoSomething メソッドを実行します。

ただし、これは私の問題/私の質問です。Visual Studio でコンソール出力が得られません。ライブラリ プロジェクトを実行すると、フォーム アプリケーションを完全にデバッグできますが、コンソール出力は表示されません。フォーム アプリケーションの代わりにコンソール アプリケーションを使用すると、外部 cmd が開かれ、そこに出力が表示されますが、出力がフォームでも動作する必要があり、Visual Studio の出力ウィンドウにある必要があります。

出力が表示されない方法を知っていますか? 出力を取得する方法の 1 つは、Console.WriteLine の代わりに Trace.WriteLine を使用することですが、コンソールが機能しないのにトレースが機能する理由がわかりません。どんな助けでも大歓迎です。

4

1 に答える 1

0

フォームを使用している場合、コンソール ウィンドウが無効になります。出力を表示したい場合は、手動で有効にする必要があります。

フォーム アプリケーションでコンソール出力/ウィンドウを表示するにはどうすればよいですか?

于 2016-07-28T06:05:49.073 に答える