如何从Visual Studio向WP7隔离存储添加文件?

4

我正在开发一个Windows Phone 7应用程序,将使用Bing Maps显示您附近的ATM机。

我有一个包含地址和GPS坐标的XML文件。但是,我该如何从Visual Studio将此文件添加到我的程序中?如果将BuildAction设置为Content并将Copy to output directory设置为Always Copy,则该文件仍未在IsolatedStorage中。我是否必须构建一个从Web下载信息的机制?或者还有其他方法吗?

3个回答

4

在Visual Studio项目中列出的内容文件被复制到生成的XAP文件中(类似于ZIP文件)。它们不会被复制到隔离存储中。

对于XML文件,您可以使用文件路径作为参数调用XmlReader.Create,如下所示:

using (XmlReader reader = XmlReader.Create("path/to/file.xml"))
{
    // read XML file here
}

或者您也可以调用Application.GetResourceStream并使用返回的StreamResourceInfo对象的Stream属性:

StreamResourceInfo sri = Application.GetResourceStream(
    new Uri("path/to/file.xml", UriKind.Relative));
// read XML file here from sri.Stream, e.g. using a StreamReader object

如果文件是来自引用项目或程序集的内容怎么办?我无法使用Application.GetResourceStream或相对Pack URI格式访问它... - Greg Bray

2
您不能在设计时直接向隔离存储传递文件,只有当应用程序运行时才能进行传递。我仍然建议通过Web服务将文件传递到应用程序中,主要是因为如果最终需要更改XML的内容,您需要更新应用程序。我的建议是创建一个WCF服务,通过简单的HTTP请求返回序列化数据(或现有的XML)。

最好采用混合方法。如果你只选择网页,当没有网络时应用程序将无法执行任何操作... - John Gardner
这真的取决于应用程序的功能。在这种情况下,应用程序无论如何都需要使用必应地图。因此,如果没有活动的互联网连接,它将无法工作。因此,在这里采用仅限Web的方法是合适的。 - Den
我在下载列表方面遇到的问题是它目前有940kb大小,而且随着时间的推移可能会增长。这意味着第一次运行应用程序时需要下载相当大的数据块。因此,我想存储一个初始列表与应用程序一起,并下载更新。客户可能更喜欢这样做。 - Smetad Anarkist

1

"Mango" SDK 附带 ISETool,可将应用程序的隔离存储快照导入/导出到本地目录:

# Copy data from IS to directory
ISETool.exe ts xd <PRODUCT-ID> "C:\TempDirectory\IsolatedStore"

# Copy data from IS to directory
ISETool.exe rs xd <PRODUCT-ID> "C:\TempDirectory\IsolatedStore"

如果您不想覆盖整个IS,该工具支持一个选项(device-folder),用于指定子目录来备份/恢复。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接