2009-02-06 105 views
4

我通過訪問Visual Studio中的項目屬性,然後添加了一個XML文件作爲我的類庫中的嵌入式資源,然後添加資源|添加資源|添加現有的文件...如何檢索嵌入式xml資源?

我試圖訪問該文件使用下面的代碼,但我不斷收到空引用返回。有人有主意嗎?

var path = Server.MapPath("~/bin/MyAssembly.dll"); 
var assembly = Assembly.LoadFile(path); 
var stream = assembly.GetManifestResourceStream("MyNamespace.filename.xml"); 

回答

3

MSDN page for GetManifestResourceStream使這注:

該方法返回一個空引用 (在Visual Basic中爲Nothing),如果在其他程序集的私人 資源 訪問和調用方不具有 ReflectionPermission與 ReflectionPermissionFlag.MemberAccess 標誌。

您是否在程序集中將資源標記爲「公共」?

+0

我確實已經在程序集中將它標記爲公共。仍然是空引用。 – 2009-02-06 03:13:13

5

我發現在Visual Studio中使用項目屬性對話框的「資源」選項卡要容易得多。那麼你有一個產生過強類型引用您的資源:

Properties.Resources.Filename 
0

我發現這篇文章解釋了很好的如何設置此:http://www.devx.com/dotnet/Article/10831/1954

一件事,可能在這種情況下,使用有幫助確定嵌入資源位置的不同方法。

  • GetEntryAssembly:使用此方法引用運行以啓動當前進程的可執行文件。入口程序集是爲Windows窗體應用程序設置的,但對於大多數其他應用程序(例如Web項目),GetEntryAssembly返回'Nothing'(或者在C#中爲null)。
  • GetExecutingAssembly:使用此方法引用與執行代碼相同的程序集。
  • GetCallingAssembly:使用此方法引用包含調用當前方法的代碼的程序集。如果編寫通用代碼以讀取嵌入資源位於調用程序集中的共享程序集內的嵌入資源,則此方法非常有用。

我個人比較喜歡使用「Resources」選項卡的方法,因爲它允許我使用其他工具將資源添加到項目中以包含在編譯中。我不必使用這個工具的GUI