NotSupportedException «Префикс Uri не распознан» в консольном приложении - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь прочитать метрики из файла истинного типа (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()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...