Я пытаюсь прочитать метрики из файла истинного типа (ttf) с помощью консольного приложения net-framework.
"К сожалению" работает следующий код:
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
По-видимому, это метод, в котором проверяется префикс для схемы "pack". Но это не может быть проблемой, так как схема уже зарегистрирована. Как это может относиться к закомментированному Console.ReadKey()
?