我试图通过使用网络框架控制台应用程序从真实类型文件(ttf)中读取指标。
“不幸的是”以下代码有效:
private static void Main(string[] args)
{
if (!UriParser.IsKnownScheme("pack"))
{
var parser = new GenericUriParser(GenericUriParserOptions.GenericAuthority);
UriParser.Register(parser, "pack", -1);
}
var fontUri = new Uri("pack://application:,,,/TestConsole;component/cmmi10.ttf");
Console.WriteLine(fontUri.Scheme);
Console.ReadKey();
var glyph = new GlyphTypeface(fontUri);
Console.WriteLine(glyph.FontUri.ToString());
Console.ReadKey();
}
不幸的是,由于我在注释第一个Console.ReadKey();
时遇到了麻烦,因此我收到了一个 NotSupportedException 消息,消息为“无法识别Uri前缀”。
我在寻找此NotSupportedException的解决方案时偶然发现了此行为。因此,我尝试在控制台中显示几个Uri属性,以了解其中哪一部分是错误的。原来是“打包”方案,它显然是wpf特定的,必须在控制台应用程序中显式注册。
尽管在这个例外情况上有几个类似的问题,但我没有找到可以将Console.ReadKey()
方法连接到未找到的uri前缀的解释。
我跟踪了源代码中抛出此异常的位置:
[https://referencesource.microsoft.com/System/net/System/Net/WebRequest.cs.html#4a9454016805ca53][1]-第203行
显然,这是验证“打包”方案前缀的方法。但这不是问题,因为该方案已经注册。这与注释过的Console.ReadKey()
有什么关系?