尝试更改控制台前景色时,Mono 应用程序因 ArgumentNullException 而失败
Mono application fails with ArgumentNullException when trying to change console foreground color
当我尝试启动此应用程序时:
private static void Main(string[] args)
{
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("test");
}
在单声道下,失败并出现以下异常:
Unhandled Exception:
System.ArgumentNullException: Argument cannot be null.
Parameter name: format
at System.ParameterizedStrings.Evaluate (System.String format, FormatParam[] args) [0x00000] in <filename unknown>:0
at System.TermInfoDriver.ChangeColor (System.String format, ConsoleColor color) [0x00000] in <filename unknown>:0
at System.TermInfoDriver.set_ForegroundColor (ConsoleColor value) [0x00000] in <filename unknown>:0
at System.ConsoleDriver.set_ForegroundColor (ConsoleColor value) [0x00000] in <filename unknown>:0
at System.Console.set_ForegroundColor (ConsoleColor value) [0x00000] in <filename unknown>:0
at FudpLoader.Application.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.ArgumentNullException: Argument cannot be null.
Parameter name: format
at System.ParameterizedStrings.Evaluate (System.String format, FormatParam[] args) [0x00000] in <filename unknown>:0
at System.TermInfoDriver.ChangeColor (System.String format, ConsoleColor color) [0x00000] in <filename unknown>:0
at System.TermInfoDriver.set_ForegroundColor (ConsoleColor value) [0x00000] in <filename unknown>:0
at System.ConsoleDriver.set_ForegroundColor (ConsoleColor value) [0x00000] in <filename unknown>:0
at System.Console.set_ForegroundColor (ConsoleColor value) [0x00000] in <filename unknown>:0
at FudpLoader.Application.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0
Mono 的版本是:
Mono JIT compiler version 4.0.2 (Stable 4.0.2.5/c99aa0c Чт. сент. 17 16:22:45 MSK 2015)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
TLS: __thread
SIGSEGV: normal
Notifications: epoll
Architecture: armel,vfp+hard
Disabled: aot,profiler,debug
Misc: softdebug
LLVM: supported, not enabled.
GC: sgen
在 Linux 中启动,使用 BuildRoot 和 运行 在 ARM 处理器上构建。如果我不尝试改变控制台的颜色,应用程序工作正常;如果我在虚拟机 Linux 上启动它,彩色应用程序也能正常工作。
如果使用单声道源跟踪您的异常堆栈跟踪,您可以看到单声道使用 TermInfo 来获取当前终端的功能。设置前景色时,它会查询 SetAForeground 功能,当它失败时会发生错误。因此,terminfo 告诉 mono 当前终端不支持 SetAForeground 功能。
我需要设置环境变量TERM
,TermInfo 开始正常工作。
就我而言,它是:
export TERM=xterm-color
当我尝试启动此应用程序时:
private static void Main(string[] args)
{
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("test");
}
在单声道下,失败并出现以下异常:
Unhandled Exception:
System.ArgumentNullException: Argument cannot be null.
Parameter name: format
at System.ParameterizedStrings.Evaluate (System.String format, FormatParam[] args) [0x00000] in <filename unknown>:0
at System.TermInfoDriver.ChangeColor (System.String format, ConsoleColor color) [0x00000] in <filename unknown>:0
at System.TermInfoDriver.set_ForegroundColor (ConsoleColor value) [0x00000] in <filename unknown>:0
at System.ConsoleDriver.set_ForegroundColor (ConsoleColor value) [0x00000] in <filename unknown>:0
at System.Console.set_ForegroundColor (ConsoleColor value) [0x00000] in <filename unknown>:0
at FudpLoader.Application.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.ArgumentNullException: Argument cannot be null.
Parameter name: format
at System.ParameterizedStrings.Evaluate (System.String format, FormatParam[] args) [0x00000] in <filename unknown>:0
at System.TermInfoDriver.ChangeColor (System.String format, ConsoleColor color) [0x00000] in <filename unknown>:0
at System.TermInfoDriver.set_ForegroundColor (ConsoleColor value) [0x00000] in <filename unknown>:0
at System.ConsoleDriver.set_ForegroundColor (ConsoleColor value) [0x00000] in <filename unknown>:0
at System.Console.set_ForegroundColor (ConsoleColor value) [0x00000] in <filename unknown>:0
at FudpLoader.Application.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0
Mono 的版本是:
Mono JIT compiler version 4.0.2 (Stable 4.0.2.5/c99aa0c Чт. сент. 17 16:22:45 MSK 2015)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
TLS: __thread
SIGSEGV: normal
Notifications: epoll
Architecture: armel,vfp+hard
Disabled: aot,profiler,debug
Misc: softdebug
LLVM: supported, not enabled.
GC: sgen
在 Linux 中启动,使用 BuildRoot 和 运行 在 ARM 处理器上构建。如果我不尝试改变控制台的颜色,应用程序工作正常;如果我在虚拟机 Linux 上启动它,彩色应用程序也能正常工作。
如果使用单声道源跟踪您的异常堆栈跟踪,您可以看到单声道使用 TermInfo 来获取当前终端的功能。设置前景色时,它会查询 SetAForeground 功能,当它失败时会发生错误。因此,terminfo 告诉 mono 当前终端不支持 SetAForeground 功能。
我需要设置环境变量TERM
,TermInfo 开始正常工作。
就我而言,它是:
export TERM=xterm-color