Поведение GetFullPath в. Net Core 3.1.2 отличается от. Net 4.6.1 - PullRequest
5 голосов
/ 11 марта 2020

Следующий фрагмент кода

var x = Path.GetFullPath(@"C:\test:");

выдает это (ожидается, поскольку путь неверен) исключение при запуске с. Net 4.6.2

System.NotSupportedException: 'The given path's format is not supported.'

Но когда я запускаю тот же код с. Net Core 3.2.1, метод просто возвращает входные данные без исключения. AFAIKT do c не утверждает, что должно быть такое изменение поведения MSND

Итак, мои вопросы:

  • Я что-то упустил в docs et c.?
  • Может ли кто-нибудь еще воспроизвести это поведение?
  • Должен ли я сообщать об этом как о проблеме в репозиторий dotnet / runtime?

1 Ответ

2 голосов
/ 11 марта 2020

Это интересно. Я могу воспроизвести его отлично.

Кажется, что в. NET Framework, ему удается успешно получить полный путь, но тогда требует необходимых разрешений доступа к коду ввода-вывода файла . Подражая этому, он старается изо всех сил проверять двоеточие после разделителя дисков и выдает исключение .

On. NET Core, у него совершенно другая реализация, но это только первый бит. Он получает полный путь. Это не касается разрешений на доступ к коду, потому что они не существуют в. NET Core и API - просто заглушки для целей совместимости. В любом случае, они в какой-то мере устарели в Framework.

Однако, если мы обратимся к документации, различий нет. Framework документы говорят, что Path.GetFullPath может выдать NotSupportedException, если:

path содержит двоеточие (":"), которое не является частью идентификатора тома (например, "c: \").

Странно, но документация для. NET Core говорит точно то же самое , хотя на самом деле не выдает исключение в этом сценарии.

Я бы предположил, что по крайней мере это ошибка документации, если не ошибка времени выполнения.

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