Приложение UWP в VS2017 с файлами активов, для которых установлено «Создание содержимого» - «Копировать всегда», не копируется в папку LocalState. - PullRequest
0 голосов
/ 17 января 2020

При использовании Visual Studio 2017 для создания приложений UWP любые файлы активов, которые я помечаю с помощью действия «Создать» и устанавливаю «Копировать всегда» для свойства «Копировать в выходной каталог», копируются в соответствующие проекты \ Bin .. \ Debug project folder.

Но эти файлы не копируются в папку Local \ Packages .. \ LocalState среды выполнения и, следовательно, недоступны приложению, если я пытаюсь прочитать их из ApplicationData. Current.LocalFolder.

Это ошибка в Visual Studio или в моей среде разработки? Или это по замыслу? Если это так, каков рекомендуемый способ распространения папки, полной ресурсов или файлов данных, с вашим приложением, которую вы можете перечислить во время выполнения?

В прошлом я использовал

* Синтаксис 1008 *

при необходимости доступа к указанному файлу c или двум, но я ищу способ развернуть папку файлов, которая может содержать файлы от 1 до многих, в зависимости от цели сборки и будет скорее не нужно жестко кодировать длинный список файлов URI в приложении для каждого файла, а затем изменять его при замене файлов для специальной сборки.

Ответы [ 2 ]

0 голосов
/ 17 января 2020

После дальнейшего копания я нашел то, что искал.

С точки зрения API, похоже, что расположение, в которое «Копирование в выходной каталог» помещает файлы, считается установленным расположением пакета. Поэтому вместо того, чтобы пытаться перечислить файлы папки LocalState или ее подпапок, необходимо извлечь папку InstalledLocation и перечислить ее, чтобы получить доступ к файлам активов, распространяемым вместе с приложением.

Например:

StorageFolder installedFolder =  Windows.ApplicationModel.Package.Current.InstalledLocation;
StorageFolder assetsFolder = await installedFolder.GetFolderAsync("assets");
IReadOnlyList<StorageFile> pictures = await assetsFolder.GetFilesAsync();

- это способ доступа к папке «Активы» или любой другой подпапке «Активы» или root вашего проекта, если вы соответствующим образом измените параметр GetFolderAsyn c.

0 голосов
/ 17 января 2020

Копировать Всегда не копируются в папку LocalState.

Возможно, вы неправильно поняли функцию «Копировать в выходной каталог», она не будет выводиться в локальную папку.

Если вы хотите скопировать файлы в localFolder, вам необходимо скопировать их вручную. О том, как вручную копировать, файлы, для которых установлено «Копировать всегда», будут сгенерированы в каталоге установки, вы можете go в соответствующую папку, чтобы найти файлы, и использовать метод CopyAsync() для копирования в локальную папку.

...