Silverlight文件权限问题
我正在Visual Studio中工作的Silverlight 4/C#项目。我通过右键单击项目>>添加新项目>> Xml文件创建了一个XML数据文件。然后我尝试打开该文件:Silverlight文件权限问题
StreamReader streamReader = new StreamReader("data.xml");
但是,这会产生安全异常。我该如何解决这个问题,或者授予必要的权限?
StreamReader的构造函数期望将文件路径导入本地文件系统,该文件路径仅在具有提升信任的浏览器中可用。
相反,你应该使用Application.GetResourceStream
: -
Stream stream = Application.GetResourceStream(new Uri("data.xml", UriKind.Relative));
StreamReader reader = new StreamReader(stream);
但是我希望你真的只是想这在XDocument
,你绕过这个StreamReader的阶段: -
XDocument doc = XDocument.Load(stream);
顺便说一句,我个人将XML保留为Xap中的内容而不是将其嵌入到程序集中。
你只需要能够在执行时读取文件?如果是这样,我建议您将其设置为在Visual Studio中具有资源构建操作,然后使用Assembly.GetManifestResourceStream
来打开它。这是将只读数据与应用程序(IMO)捆绑在一起的最简单方法。
默认情况下,Silverlight不允许本地文件系统访问。您的选择是:
- 使用IsolatedStorage。
- 以elevated permissions运行。
- 将文件嵌入到程序集中,如果只需要读取它,as suggested by Jon Skeet。
如果您需要一般存储数据,请使用IsolatedStorage(如果可以)。
-1 OP不是故意尝试从本地磁盘读取,而是作为资源读取,因此无需使用IsolatedStorage和提升的权限引用,此外Skeet的后期引用使其成为对SL – 2010-11-18 18:09:42
您需要将项目标记为资源,而不是嵌入式资源。
从MSDN ...
Visual Studio中的属性窗口 在 生成操作下拉列表中提供了其他几个值。但是, 您可以在Silverlight项目中仅使用前三个 值。特别是,Silverlight嵌入式 资源必须始终使用资源 构建操作,而不是嵌入式 资源构建操作,它使用 格式,Silverlight无法识别 。
一个伟大的步行可以看到here需要你正在努力完成。既然你不是试图访问磁盘上的文件,而是作为资源,这不是问题。 IsolatedStorage或提升的权限在这里是相关的。
无效的嵌入式资源。奇怪。它适用于WP7,这几乎是我对SL的所有直接体验。它在SL4中是否仍然存在? – 2010-11-18 18:11:52
@Jon在SL4中没有尝试过,但其他版本的SL ...现在只能脱离文档... – 2010-11-18 18:16:53
请参阅下面的注释,SL不尊重基于MSDN的嵌入式资源引用 – 2010-11-18 18:03:13
@Aaron:谢谢,编辑。 – 2010-11-18 18:14:14