2012-04-05 36 views
1

我有一個Silverlight應用程序,我正在做以下事情來加載一個XML文件,並進一步解析它。Silverlight中的GetManifestStream加載xml文件

我已將生成操作設置爲嵌入式資源,複製到輸出目錄。
,我使用的代碼是:

try 
      { 
       Xmlfile = XDocument.Load(Assembly.GetExecutingAssembly().GetManifestResourceStream("file.xml")); 
      } 
      catch(Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 

消息,我接收作爲例外:
值不能爲空。
參數名:輸入

編輯

我想它的工作原理(在WPF)以下,但在Silverlight中給出問題:

Assembly.GetExecutingAssembly().GetManifestResourceStream(Assembly.GetExecutingAssembly().GetName().Name + ".file.xml") 

錯誤:

'System.Reflection.Assembly.GetName()' is inaccessible due to its protection level 
+0

您的問題標題和標籤提到Silverlight,但您的問題正文談論WPF應用程序。這是什麼? – 2012-04-05 08:13:36

回答

1

你會不會d前面加上您的組裝和其子文件夾的名稱,如:

string assemblyName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name; 
XDocument.Load(assemblyName + ".subfolder.file.xml"); 

有時也不清楚子文件夾(S)應該是什麼。如果是這樣的話,就直接檢查使用此名稱:

string[] names = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames(); 
+0

'string [] names = System.Reflection.Assembly.GetExecutingAssembly()。GetManifestResourceNames();'顯示文件'Wpfapplication12.file.xml'。但是在試圖在你的答案中使用上面的代碼來獲取文件時,我仍然得到'File not found error:..//bin/Debug/WpfApplication12.file.xml not found' – user1240679 2012-04-05 08:29:36

1

我沒有一個答案,但前面加上「解決方案」並不爲Silverlight 5應用程序的工作。

如果您使用Silverlight 5.0項目編寫代碼,您將獲得 'System.Reflection.Assembly.GetName()'由於編譯時的保護級別而無法訪問。

爲了記錄在案,我得到類似的錯誤爲:

System.Reflection.Assembly.GetName(); 
System.Reflection.Assembly.GetEntryAssembly() 
<someAssembly>.GetReferencedAssemblies() 

對於你得到同樣的保護錯誤其他的GetName()的過載。

<someAssembly>.GetType(fullyQualifiedTypeName, false, true); 

「System.Reflection.Assembly.GetType(字符串,布爾,布爾)」不可訪問由於其保護級別

我懷疑的保護級別從錯誤這樣一個事實Silverlight應用程序僅部分可信賴的代碼和反射本質上是需要高度信任的。但是,最後我只是猜測微軟代碼牆背後的東西。

有沒有關於MSDN或某個地方的文章,描述了C#反射的哪些部分與Visions組合在禁用/保護時集成到Silverlight 5 Web應用程序中?