Visual Studio 使用动态程序集加载从库项目启动的外部程序的控制台输出
Visual Studio console output of external program started from library project using dynamic assembly loading
我创建了一个由 3 个项目组成的简单测试解决方案:
- 第一个项目是一个 class 库,其中包含一个接口 ITest,其方法为 void DoSomething()
- 第二个项目也是一个 class 库,其中包含一个 class 实现 ITest 的测试,在 DoSomething 中,它只是做一个 Console.WriteLine
- 第三个项目是一个 Forms 应用程序,它使用动态程序集加载通过 ITest 接口加载和实例化测试 class。
这里是源代码:
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");
}
}
在带有测试 class 的 LibraryProject 中,我引用了表单应用程序项目,在调试下的项目属性中,我选择 "Start external program" 从库调试文件夹启动表单应用程序:
不出所料,我现在可以 运行 库项目了。这将从输出文件夹中将表单应用程序作为外部程序启动。在那里,表单找到库 dll 并动态加载它并在我的测试 class.
上执行 DoSomething 方法
但是,这是我的 problem/my 问题,我在 Visual Studio 中没有得到任何控制台输出。当我 运行 库项目但控制台输出从未出现时,我可以完美地调试表单应用程序。当我使用控制台应用程序而不是表单应用程序时,会打开一个外部 cmd,我可以在那里看到输出,但我需要输出也能与表单一起使用,并且它必须在 Visual Studios output window.
你知道我为什么看不到输出吗?我想出的一种获得输出的方法是使用 Trace.WriteLine 而不是 Console.WriteLine 但我不明白为什么 trace 工作而控制台不工作。感谢任何帮助。
当您使用表单时,它会禁用控制台 window。如果要查看输出,则需要手动启用它。
How do I show a console output/window in a forms application?
我创建了一个由 3 个项目组成的简单测试解决方案:
- 第一个项目是一个 class 库,其中包含一个接口 ITest,其方法为 void DoSomething()
- 第二个项目也是一个 class 库,其中包含一个 class 实现 ITest 的测试,在 DoSomething 中,它只是做一个 Console.WriteLine
- 第三个项目是一个 Forms 应用程序,它使用动态程序集加载通过 ITest 接口加载和实例化测试 class。
这里是源代码:
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");
}
}
在带有测试 class 的 LibraryProject 中,我引用了表单应用程序项目,在调试下的项目属性中,我选择 "Start external program" 从库调试文件夹启动表单应用程序:
不出所料,我现在可以 运行 库项目了。这将从输出文件夹中将表单应用程序作为外部程序启动。在那里,表单找到库 dll 并动态加载它并在我的测试 class.
上执行 DoSomething 方法但是,这是我的 problem/my 问题,我在 Visual Studio 中没有得到任何控制台输出。当我 运行 库项目但控制台输出从未出现时,我可以完美地调试表单应用程序。当我使用控制台应用程序而不是表单应用程序时,会打开一个外部 cmd,我可以在那里看到输出,但我需要输出也能与表单一起使用,并且它必须在 Visual Studios output window.
你知道我为什么看不到输出吗?我想出的一种获得输出的方法是使用 Trace.WriteLine 而不是 Console.WriteLine 但我不明白为什么 trace 工作而控制台不工作。感谢任何帮助。
当您使用表单时,它会禁用控制台 window。如果要查看输出,则需要手动启用它。
How do I show a console output/window in a forms application?