如何從嵌入式XML文件讀取 - 作爲c#項目一部分的XML文件? 我已經將XML文件添加到了我的項目中,並且我想從中讀取它。我希望XML文件能夠與該項目一起編譯,因爲我不希望它會成爲用戶可以看到的資源。閱讀嵌入式XML文件c#
有什麼想法?
如何從嵌入式XML文件讀取 - 作爲c#項目一部分的XML文件? 我已經將XML文件添加到了我的項目中,並且我想從中讀取它。我希望XML文件能夠與該項目一起編譯,因爲我不希望它會成爲用戶可以看到的資源。閱讀嵌入式XML文件c#
有什麼想法?
確保XML文件是.csproj項目的一部分。 (如果你可以在解決方案資源管理器中看到它,那就很好。)
將XML文件的「Build Action」屬性設置爲「Embedded Resource」。
使用下面的代碼在運行時檢索文件內容:
public string GetResourceTextFile(string filename)
{
string result = string.Empty;
using (Stream stream = this.GetType().Assembly.
GetManifestResourceStream("assembly.folder."+filename))
{
using (StreamReader sr = new StreamReader(stream))
{
result = sr.ReadToEnd();
}
}
return result;
}
每當你想讀取文件內容,只需要使用
string fileContents = GetResourceTextFile("myXmlDoc.xml");
注意,「組裝。文件夾「應替換爲包含資源文件的項目名稱和文件夾。
更新
其實,assembly.folder
應利用在同一文件夾中的XML文件中創建一個類將有默認的命名空間所取代。這通常是defaultNamespace.folder0.folder1.folder2.....
。
答案結尾處的「註釋」看起來不正確。請參閱此答案(http://stackoverflow.com/a/3314213/940783),其中聲明您應該輸入項目的默認名稱空間,而不僅僅是項目名稱。只是使用項目的程序集名稱不適合我。 – ClearCloud8 2013-09-11 16:31:19
@ClearCloud8良好的通話。默認名稱空間自動設置爲項目名稱,但這不是必需的,因此不應假定。 – 2013-09-12 22:57:31
如果您需要列出所有加載的資源,請查看'GetType()。Assembly.GetManifestResourceNames()' – ogrim 2015-02-23 08:23:09
設置生成操作嵌入的資源,然後寫:
using (Stream stream = typeof(MyClass).Assembly.GetManifestResourceStream("MyNameSpace.Something.xml")) {
//Read the stream
}
這一個爲我工作。 – Mike 2011-06-23 14:08:33
訪問這樣說:
GetType().Module.Assembly.GetManifestResourceStream("namespace.folder.file.ext")
注意,資源名稱字符串的文件,包括 擴展的名字,通過該項目的默認命名空間之前。 如果資源位於文件夾內,則還必須將其包含在 字符串中。
(從http://www.dotnet247.com/247reference/msgs/1/5704.aspx,但我用它pesonally)
您可以使用Reflector(免費從http://www.red-gate.com/products/reflector/)查找嵌入式XML文件的路徑。
然後,它只是一個
Assembly a = typeof(Assembly.Namespace.Class).Assembly;
Stream s = a.GetManifestResourceStream("Assembly.Namespace.Path.To.File.xml");
XmlDocument mappingFile = new XmlDocument();
mappingFile.Load(s);
s.Close();
類似的問題,事:HTTP://計算器。com/questions/3314140/how-to-read-embedded-resource-text-file – ClearCloud8 2013-09-11 16:32:10