Вывод на консоль Visual Studio внешней программы, запущенной из проекта библиотеки с использованием динамической загрузки сборки
Я создал простое тестовое решение, состоящее из 3 проектов:
- Первый проект - это библиотека классов, содержащая интерфейс ITest с методом void DoSomething()
- Второй проект также является библиотекой классов, содержащей класс Test, который реализует ITest, а в DoSomething он просто выполняет Console.WriteLine.
- Третий проект - это приложение Forms, которое использует динамическую загрузку сборки для загрузки и создания экземпляра класса Test через интерфейс ITest.
Вот исходный код:
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");
}
}
В LibraryProject с классом Test я ссылаюсь на проект приложения форм, а в свойствах проектов в разделе "Отладка" я выбрал "Запустить внешнюю программу", чтобы запустить приложение форм из папки отладки библиотек:
Как и ожидалось, теперь я могу запустить проект библиотеки. Это запускает приложение форм как внешнюю программу из выходной папки. Там формы находят библиотеку dll и динамически загружают ее и выполняют метод DoSomething в моем классе Test.
Тем не менее, и это моя проблема / мой вопрос, я не получаю вывод консоли на Visual Studio. Я могу прекрасно отлаживать приложение форм, когда запускаю проект библиотеки, но вывод консоли никогда не появляется. Когда я использую консольное приложение вместо приложения для форм, открывается внешний cmd, и я могу видеть выходные данные там, но мне нужно, чтобы выходные данные также работали с формами И это должно быть в окне вывода Visual Studios.
У вас есть идея, как я не вижу результат? Один из способов получить вывод - использовать Trace.WriteLine вместо Console.WriteLine, но я не понимаю, почему трассировка работает, а консоль - нет. Любая помощь приветствуется.
1 ответ
Когда вы используете формы, оно отключит окно консоли. Если вы хотите увидеть вывод, вам нужно вручную включить его.