c# - tutorial - No hay salida a la consola desde una aplicación WPF?
entity framework database first español (9)
Aunque John Leidegren sigue disparando la idea, Brian está en lo cierto. Lo acabo de hacer funcionar en Visual Studio.
Para que quede claro, una aplicación WPF no crea una ventana de Consola de forma predeterminada.
Debe crear una aplicación WPF y luego cambiar el OutputType a "Aplicación de consola". Cuando ejecutas el proyecto, verás una ventana de consola con tu ventana de WPF frente a él.
No parece muy bonito, pero lo encontré útil ya que quería que mi aplicación se ejecutara desde la línea de comandos con comentarios allí, y luego para ciertas opciones de comando, mostraría la ventana de WPF.
Estoy usando Console.WriteLine () desde una aplicación de prueba WPF muy simple, pero cuando ejecuto la aplicación desde la línea de comandos, no veo nada escrito en la consola. ¿Alguien sabe lo que podría estar pasando aquí?
Puedo reproducirlo creando una aplicación WPF en VS 2008 y simplemente agregando Console.WriteLine ("texto") en cualquier lugar que se ejecute. ¿Algunas ideas?
Todo lo que necesito por ahora es algo tan simple como Console.WriteLine (). Me doy cuenta de que podría usar log4net o alguna otra solución de registro, pero realmente no necesito tanta funcionalidad para esta aplicación.
Editar: debería haber recordado que Console.WriteLine () es para aplicaciones de consola. Bueno, no hay preguntas estúpidas, ¿verdad? :-) Solo usaré System.Diagnostics.Trace.WriteLine () y DebugView por ahora.
Es posible ver resultados destinados a la consola mediante el uso de la redirección de línea de comandos .
Por ejemplo:
C:/src/bin/Debug/Example.exe > output.txt
escribirá todo el contenido en el archivo output.txt
.
Haga clic derecho en el proyecto, "Propiedades", pestaña "Aplicación", cambie "Tipo de salida" a "Aplicación de consola", y luego también tendrá una consola.
Mira esta publicación, fue muy útil para mí. Descargue la muestra del código:
http://www.codeproject.com/Articles/335909/Embedding-a-Console-in-a-C-Application
Por lo que sé, Console.WriteLine () es solo para aplicaciones de consola. Creo que este es tu problema
Publicación anterior, pero me encontré con esto, por lo que si intentas enviar algo a Output en un proyecto de WPF en Visual Studio, el método actual es:
Incluye esto:
using System.Diagnostics;
Y entonces:
Debug.WriteLine("something");
Puedes usar
Trace.WriteLine("text");
Esto saldrá a la ventana "Salida" en Visual Studio (cuando se depura).
asegúrese de tener el ensamblaje de Diagnóstico incluido:
using System.Diagnostics;
Tendrá que crear una ventana de consola manualmente antes de llamar a cualquier método Console.Write. Eso iniciará la consola para que funcione correctamente sin cambiar el tipo de proyecto (que para la aplicación WPF no funcionará).
Aquí hay un ejemplo completo del código fuente, de cómo se vería una clase de ConsoleManager, y cómo se puede usar para habilitar / deshabilitar la consola, independientemente del tipo de proyecto.
Con la siguiente clase, solo necesita escribir ConsoleManager.Show()
algún lugar antes de llamar a Console.Write
...
[SuppressUnmanagedCodeSecurity]
public static class ConsoleManager
{
private const string Kernel32_DllName = "kernel32.dll";
[DllImport(Kernel32_DllName)]
private static extern bool AllocConsole();
[DllImport(Kernel32_DllName)]
private static extern bool FreeConsole();
[DllImport(Kernel32_DllName)]
private static extern IntPtr GetConsoleWindow();
[DllImport(Kernel32_DllName)]
private static extern int GetConsoleOutputCP();
public static bool HasConsole
{
get { return GetConsoleWindow() != IntPtr.Zero; }
}
/// <summary>
/// Creates a new console instance if the process is not attached to a console already.
/// </summary>
public static void Show()
{
//#if DEBUG
if (!HasConsole)
{
AllocConsole();
InvalidateOutAndError();
}
//#endif
}
/// <summary>
/// If the process has a console attached to it, it will be detached and no longer visible. Writing to the System.Console is still possible, but no output will be shown.
/// </summary>
public static void Hide()
{
//#if DEBUG
if (HasConsole)
{
SetOutAndErrorNull();
FreeConsole();
}
//#endif
}
public static void Toggle()
{
if (HasConsole)
{
Hide();
}
else
{
Show();
}
}
static void InvalidateOutAndError()
{
Type type = typeof(System.Console);
System.Reflection.FieldInfo _out = type.GetField("_out",
System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
System.Reflection.FieldInfo _error = type.GetField("_error",
System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
System.Reflection.MethodInfo _InitializeStdOutError = type.GetMethod("InitializeStdOutError",
System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
Debug.Assert(_out != null);
Debug.Assert(_error != null);
Debug.Assert(_InitializeStdOutError != null);
_out.SetValue(null, null);
_error.SetValue(null, null);
_InitializeStdOutError.Invoke(null, new object[] { true });
}
static void SetOutAndErrorNull()
{
Console.SetOut(TextWriter.Null);
Console.SetError(TextWriter.Null);
}
}
Yo uso Console.WriteLine () para usar en la ventana de Salida ...