0

使用 Visual Studio 2017 构建 UWP 应用程序时,我使用“内容”构建操作标记并为“复制到输出目录”属性设置“始终复制”的任何资产文件都将复制到相应的项目 \Bin ..\调试项目文件夹。

但是这些文件没有被复制到运行时 Local\Packages .. \LocalState 文件夹,因此如果我尝试从 ApplicationData.Current.LocalFolder 读取它们,应用程序将无法使用这些文件。

这是 Visual Studio 中的错误还是我的开发环境中的错误?或者这是设计使然?如果是设计使然,那么推荐的方式是使用您可以在运行时枚举的应用程序分发一个充满资产或数据文件的文件夹?

过去,我使用过

StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new System.Uri("ms-appx:///assets/xxx.png")); 

需要访问一个或两个特定文件时的语法,但我正在寻找一种方法来部署可能包含一对多文件的文件文件夹,具体取决于构建的目的,而不必对长列表进行硬编码将每个文件的文件 uri 放入应用程序,然后在更改文件以进行特殊构建时对其进行更改。

4

2 回答 2

0

复制 始终不复制到 LocalState 文件夹。

可能你对“复制到输出目录”的功能有误解,它不会输出到本地文件夹。

如果要将文件复制到localFolder,则需要手动复制。关于如何手动复制,安装目录下会生成设置了“Copy Always”的文件,您可以到对应的文件夹中找到文件,使用CopyAsync()方法复制到本地文件夹。

于 2020-01-17T07:02:30.160 回答
0

进一步挖掘后,我找到了我想要的东西。

从 API 的角度来看,“复制到输出目录”放置文件的位置似乎被认为是包的 InstalledLocation。因此,与其尝试枚举 LocalState 文件夹或其子文件夹的文件,不如检索 InstalledLocation 文件夹并枚举它,以便访问随应用程序分发的资产文件。

例如:

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

如果您相应地调整 GetFolderAsync 参数,这将是访问 Assets 文件夹或 Assets 的任何其他子文件夹或项目根目录的方式。

于 2020-01-17T18:51:40.620 回答