mono - template - mvvmcross xamarin forms
MvvmCross Mvx.Trace uso (2)
MvvmCross DebugTrace se enruta a través de una implementación IMvxTrace
de IMvxTrace
Cada plataforma proporciona diferentes implementaciones de esto:
- las plataformas de Windows usan rastreo de
Debug
(porqueTrace
sí no está disponible en todas las plataformas de Windows) - Android usa un registro dual de
Debug
y ellog
Android - iOS usa un registro dual de
Debug
y laConsole
iOS
Esto funcionó bien en las versiones anteriores de MvvmCross, especialmente cuando las personas se vinculaban directamente al código fuente de MvvmCross y, por lo tanto, podían vincularse directamente a los binarios MvvmCross de depuración o liberación.
Sin embargo ... porque la gente ahora usa cada vez más los Binarios de Nuget, en los que se compila Debug
, entonces esto a menudo deja a la gente preguntando "¿Cómo se usa?"
La manera más fácil es que anule la inicialización de IMvxTrace en su clase de Setup
.
Esto es fácil de hacer, por ejemplo:
protected override IMvxTrace CreateDebugTrace() { return new MyDebugTrace(); }
donde MyDebugTrace
es algo así como:
public class MyDebugTrace : IMvxTrace
{
public void Trace(MvxTraceLevel level, string tag, Func<string> message)
{
Debug.WriteLine(tag + ":" + level + ":" + message());
}
public void Trace(MvxTraceLevel level, string tag, string message)
{
Debug.WriteLine(tag + ":" + level + ":" + message);
}
public void Trace(MvxTraceLevel level, string tag, string message, params object[] args)
{
try
{
Debug.WriteLine(string.Format(tag + ":" + level + ":" + message, args));
}
catch (FormatException)
{
Trace(MvxTraceLevel.Error, tag, "Exception during trace of {0} {1} {2}", level, message);
}
}
}
Si desea incluir diferentes implementaciones para depurar / liberar; si desea activar / desactivar esto en tiempo de ejecución; si desea filtrar en MvxTraceLevel
o tag
; o si desea utilizar un motor de registro de terceros, esto también debería ser fácil con C # simple en cada plataforma.
Estoy usando MvvmCross. En la biblioteca, veo el uso del método Mvx.Trace, pero no la salida a la consola / ventana de salida. ¿Cómo usarlo?
ps He establecido el compilador constante Trace = true
Gracias.
Acaba de resolver un problema en iOS con la solución actual proporcionada por Stuart.
Ejecutar una sesión de depuración en VS con MvxTrace utilizando Debug.WriteLine
puede ser extremadamente lento dependiendo de cuán detallado sea el registro de su aplicación. Lo mismo para Trace.WriteLinte
. Use Console.WriteLine
lugar (como MvvmCross MvxDebugTrace
hace) que no se ve afectado.
Consulta este elemento de error de Xamarin para obtener "más" detalles: https://bugzilla.xamarin.com/show_bug.cgi?id=13538#c4