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 を使用することですが、コンソールが機能しないのにトレースが機能する理由がわかりません。どんな助けでも大歓迎です。