Как я могу читать из встроенного XML-файла - XML-файл, который является частью c# проекта? Я добавил XML-файл к своему проекту, и я хочу читать из него. Я хочу, чтобы XML-файл скомпилировал с проектом, потому что я не хочу это, это будет ресурс, который видит пользователь.
Какая-либо идея?
Убедитесь, что XML-файл является частью вашего проекта .csproj. (Если вы видите это в обозревателе решений, все в порядке.)
Установите для свойства «Build Action» XML-файла значение «Embedded Resource».
Используйте следующий код для получения содержимого файла во время выполнения:
public string GetResourceTextFile (string filename)
{
string result = string.Empty;
{{ 1}} с использованием (Stream stream = this.GetType (). Assembly.
GetManifestResourceStream ("assembly.folder." + Filename))
{
using (StreamReader sr = new StreamReader (stream))
{
result = sr.ReadToEnd ();
}
}
вернуть результат;
}
Всякий раз, когда вы хотите прочитать содержимое файла, просто используйте
string fileContents = GetResourceTextFile("myXmlDoc.xml");
Обратите внимание, что "assembly.folder" следует заменить на имя проекта и папку, содержащую файл ресурсов.
Обновление
Фактически, assembly.folder
следует заменить пространством имен, в котором класс, созданный в той же папке, что и XML-файл, будет по умолчанию. Обычно это defaultNamespace.folder0.folder1.folder2 .....
.
Установите действие сборки на встроенный ресурс, затем напишите следующее:
using (Stream stream = typeof(MyClass).Assembly.GetManifestResourceStream("MyNameSpace.Something.xml")) {
//Read the stream
}
Получите доступ следующим образом:
GetType (). Module.Assembly.GetManifestResourceStream ("namespace.folder.file.ext")
Обратите внимание, что строка имени ресурса является именем файл, включая расширение, которому предшествует пространство имен проекта по умолчанию. Если ресурс находится внутри папки, вы также должны включить его в строку .
(из http://www.dotnet247.com/247reference/msgs/1/5704.aspx , но я использовал его песонально)
Вы можете использовать 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();
Вы также можете добавить XML-файл в качестве ресурса, а затем адресовать его содержимое с помощью Resources.YourXMLFilesResourceName
(в виде строки, то есть с помощью StringReader).