2

它给了我一个找不到文件的异常?在资产内部我有“beep.wav”但不工作。 visual studio 2012\Projects\Myproject\Myproject\Assets

private async void beep()
{
    MediaElement snd = new MediaElement();
    StorageFolder folder = await Package.Current.InstalledLocation.GetFolderAsync("Assets");
    StorageFile file = await folder.GetFileAsync("beep.wav");
    var stream = await file.OpenAsync(FileAccessMode.Read);
    snd.SetSource(stream, file.ContentType);
    snd.Play();
}

上面的代码确实有效,我只需要将它手动添加到项目中......

4

2 回答 2

1

运行应用程序时,Package.Current.InstalledLocation不会是项目所在的目录(visual studio 2012\Projects\Myproject\Myproject\Assets),而是应用程序部署到的目录(可能类似于visual studio 2012\Projects\Myproject\Myproject\bin\Debug\AppX\Assets)。

因此,如果您只是手动将 wav 文件复制到项目的 Assets 目录中,它不会起作用,因为您的应用程序将在部署位置查找它。

您注意到在您将 wav 文件添加到项目后它可以工作,但是将文件添加到项目中并不完全是使它工作的原因。如果您将文件添加到 Windows 应用商店项目,并在文件的Properties中将Build Action设置为Content,则该文件将被复制到您的应用程序的部署位置。

您不必手动将此文件的 Build Action 设置为 Content,因为 VS 会自动为某些文件类型(如 wav)执行此操作,因此,文件已复制到部署位置。

于 2013-06-11T18:06:41.450 回答
0

您应该使用以下代码访问存储在 Asset 文件夹中的文件

 var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/beep.wav"));
于 2013-06-10T17:14:32.017 回答