【问题标题】:UWP app in VS2017 with Asset files set to Build Content - Copy Always are not copied to LocalState folderVS2017 中的 UWP 应用程序,其中资产文件设置为构建内容 - 始终复制不会复制到 LocalState 文件夹
【发布时间】:2020-05-03 21:53:41
【问题描述】:

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

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

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

过去,我使用过

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

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

【问题讨论】:

    标签: uwp visual-studio-2017 runtime assets storagefolder


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      从 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 子文件夹或项目根目录的方法。

      【讨论】:

      • 我仍然不清楚的一件事是,如果我导航到:' '' C:\Users\----userid---\AppData\Local\Packages\---packageid---\ '''
      猜你喜欢
      • 2013-03-07
      • 1970-01-01
      • 2018-07-28
      • 2016-03-23
      • 2011-06-25
      • 2014-11-12
      • 1970-01-01
      • 1970-01-01
      • 2014-09-10
      相关资源
      最近更新 更多