2010-11-18 131 views
1

我正在Visual Studio中工作的Silverlight 4/C#項目。我通過右鍵單擊項目>>添加新項目>> Xml文件創建了一個XML數據文件。然後我嘗試打開該文件:Silverlight文件權限問題

 StreamReader streamReader = new StreamReader("data.xml"); 

但是,這會產生安全異常。我該如何解決這個問題,或者授予必要的權限?

回答

1

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中的內容而不是將其嵌入到程序集中。

2

你只需要能夠在執行時讀取文件?如果是這樣,我建議您將其設置爲在Visual Studio中具有資源構建操作,然後使用Assembly.GetManifestResourceStream來打開它。這是將只讀數據與應用程序(IMO)捆綁在一起的最簡單方法。

+0

請參閱下面的註釋,SL不尊重基於MSDN的嵌入式資源引用 – 2010-11-18 18:03:13

+0

@Aaron:謝謝,編輯。 – 2010-11-18 18:14:14

2

默認情況下,Silverlight不允許本地文件系統訪問。您的選擇是:

如果您需要一般存儲數據,請使用IsolatedStorage(如果可以)。

+0

-1 OP不是故意嘗試從本地磁盤讀取,而是作爲資源讀取,因此無需使用IsolatedStorage和提升的權限引用,此外Skeet的後期引用使其成爲對SL – 2010-11-18 18:09:42

2

您需要將項目標記爲資源,而不是嵌入式資源

MSDN ...

Visual Studio中的屬性窗口 在 生成操作下拉列表中提供了其他幾個值。但是, 您可以在Silverlight項目中僅使用前三個 值。特別是,Silverlight嵌入式 資源必須始終使用資源 構建操作,而不是嵌入式 資源構建操作,它使用 格式,Silverlight無法識別 。

一個偉大的步行可以看到here需要你正在努力完成。既然你不是試圖訪問磁盤上的文件,而是作爲資源,這不是問題。 IsolatedStorage或提升的權限在這裏是相關的。

+0

無效的嵌入式資源。奇怪。它適用於WP7,這幾乎是我對SL的所有直接體驗。它在SL4中是否仍然存在? – 2010-11-18 18:11:52

+0

@Jon在SL4中沒有嘗試過,但其他版本的SL ...現在只能脫離文檔... – 2010-11-18 18:16:53