Чтение встроенного XML файла С#
Как я могу прочитать из встроенного XML файла - XML файл, который является частью проекта С#?
Я добавил файл XML в свой проект, и я хочу прочитать его. Я хочу, чтобы XML файл был скомпилирован с проектом, потому что я не хочу, чтобы он был ресурсом, который пользователь может видеть.
Любая идея?
Ответы
Ответ 1
-
Убедитесь, что XML файл является частью вашего проекта .csproj. (Если вы видите его в проводнике решений, вы в порядке.)
-
Задайте свойство Build Action для файла XML в "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" следует заменить именем проекта и папкой, содержащей файл ресурсов.
Обновление
Собственно, assembly.folder
следует заменить пространством имен, в котором класс по умолчанию, созданный в той же папке, что и файл XML. Обычно это defaultNamespace.folder0.folder1.folder2.....
.
Ответ 2
Вы также можете добавить XML файл в качестве ресурса, а затем указать его содержимое с помощью Resources.YourXMLFilesResourceName
(в виде строки, то есть с помощью StringReader).
Ответ 3
Задайте действие Build Action Embedded Resource, а затем напишите следующее:
using (Stream stream = typeof(MyClass).Assembly.GetManifestResourceStream("MyNameSpace.Something.xml")) {
//Read the stream
}
Ответ 4
Вы можете использовать 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();
Ответ 5
Обратите внимание, что строка имени ресурса - это имя файла,
включая расширение, которому предшествует пространство имен по умолчанию для проекта.
Если ресурс находится внутри папки, вы также должны включить его в
строка.
(из http://www.dotnet247.com/247reference/msgs/1/5704.aspx, но я использовал его по-английски)