2011-08-04 115 views
1

我在我的C#項目中包含了一個embebbed資源;我知道它的名字以及如何引用它,所以我想知道是否有任何方法可以獲得它的絕對路徑...在那裏?如何獲取embebbed資源的路徑?

+0

獲取其絕對路徑從什麼樣的信息?你真的想過什麼樣的「絕對路徑」?如果你能舉一個具體的例子,這將有所幫助。 –

+0

我想將一個INI文件包含到我的項目中,然後閱讀它... –

+0

但是,如果它是* embedded *資源,則它位於程序集中。在那一點上,你的意思是「絕對路徑」?這不是一個你可以參考的文件。 –

回答

2

像其他人一樣,嵌入式資源嵌入在編譯程序集中,並且不存在於文件系統上;如果您正在尋找文件系統上的文件,則應將構建操作更改爲「無」,並將「複製到輸出目錄」更改爲其中一個副本值。

然而,如果你不意味着嵌入資源,那麼它可以通過使用Assembly類的GetManifestResourceStream方法如下進行訪問:

GetType().Assembly.GetManifestResourceStream("someresourcestringhere") 

(以上代碼假定要從類訪問所述資源在同一個大會內)。

嵌入資源通常遵循以下格式(任何空格都被保留),這是你會傳遞到GetManifestResourceStream方法的字符串:

默認項目namespace.folder名稱(如果有的話).file名

就我個人而言,我發現獲取此字符串的最簡單方法是使用反編譯器工具(如Telerik的Just Decompile)來查看程序集內部並獲取您要查找的文件的完整資源名稱。

+0

我知道這是一個相當古老的答案,但我想要的一點信息似乎在輸入錯誤中丟失了!你已經說過「任何空間都被替換爲**空格**」。他們真的取代了什麼? – OlduwanSteve

+0

我測試了它,並且更新了你的答案。 – OlduwanSteve

5

嵌入式資源正是:嵌入式。這意味着,它包含在程序集中,並且在編譯後不會以物理文件的形式存在(如果這就是您要找的內容)。

+0

非常有幫助!謝謝。你可以建議一個替代的.xml文件我想用反射來定位?謝謝! – Rachael

+1

嵌入式資源使用簡單,無需反思。如果您希望嵌入數據(即構建後無法配置),請使用它們。否則,您可能希望使用「Content」構建操作在構建後使文件就位 - 在這種情況下,請使用良好的舊I/O API來訪問它。 –

1
System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames(); 
-1

如何

Console.WriteLine(WindowsFormsApplication1.Properties.Resources.myfile); 

其中MYFILE是一個嵌入式的ini文件