System.IO.File.Open в библиотеке netstandard2.0 из xamarin.forms в файле доступа UWP UnauthorizedAccessException - PullRequest
0 голосов
/ 23 марта 2019

У меня есть обработчик в моем глобальном проекте мобильного приложения Xamarin.Forms.Этот обработчик содержит System.Io.File.Open для текстового файла, который находится в каталоге «Пользовательский документ».

Однако при запуске приложения UWP оно выдает следующее:

Exception thrown: 'System.UnauthorizedAccessException' in System.IO.FileSystem.dll 
System.UnauthorizedAccessException: Access to the path 'C:\Users' is denied.

У меня нет большого опыта работы с Xamarin.Forms и UWP, поэтому, возможно, я что-то не так делаю сНачните.Я провел некоторое исследование, прежде чем опубликовать этот вопрос, и понял, что UWP работает в «песочнице», требующей разрешения пользователя для доступа к каталогам и / или файлам в определенных местах.

Я слышал, однако, что установка следующего в Package.appxmanifest разрешил бы доступ ко всем каталогам, к которым у текущего пользователя есть доступ:

<rescap:Capability Name="broadFileSystemAccess" />

Однако для меня это не имело никакого значения.Затем я продолжил и позволил через настройки Windows приложению получить доступ к файловой системе, как где-то упоминалось.Это тоже ничего не решило.

Провел еще одно исследование, что UWP имеет свой собственный интерфейс ввода-вывода, использующий IStorageHandlers и связанный с ним.Но их нельзя использовать в библиотеке netstandard2.0, насколько я видел.

Как можно обрабатывать файловые операции из библиотеки netstandard2.0, включенной в приложение UWP?

Ответы [ 2 ]

1 голос
/ 23 марта 2019

Возможность broadFilesystemAccess предоставит приложению доступ ко всем доступным для пользователя файлам, но только через два механизма:

  • Windows.Storage API; или
  • CreateFileFromApp и аналогичные Win32 API.

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

0 голосов
/ 23 марта 2019

Не уверен, есть ли другой ответ, который подойдет для приложений UWP, если есть, пожалуйста, разместите их здесь. Однако нетерпеливый человек, который хочет двигаться дальше, решил вместо этого использовать WPF. К счастью, Xamarin.Forms также поддерживает WPF и WinForms. Для WPF вы можете следовать официальному How To здесь: https://docs.microsoft.com/en-US/xamarin/xamarin-forms/platform/other/wpf.

К счастью для меня, я планировал поддерживать Windows до Windows 10, поэтому мне пришлось переключиться.

...