Чтение встроенного XML-файла c#

Как я могу читать из встроенного XML-файла - XML-файл, который является частью c# проекта? Я добавил XML-файл к своему проекту, и я хочу читать из него. Я хочу, чтобы XML-файл скомпилировал с проектом, потому что я не хочу это, это будет ресурс, который видит пользователь.

Какая-либо идея?

60
задан Pila 12 May 2010 в 15:40
поделиться

5 ответов

  1. Убедитесь, что XML-файл является частью вашего проекта .csproj. (Если вы видите это в обозревателе решений, все в порядке.)

  2. Установите для свойства «Build Action» XML-файла значение «Embedded Resource».

  3. Используйте следующий код для получения содержимого файла во время выполнения:

     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 ..... .

96
ответ дан 24 November 2019 в 17:35
поделиться

Установите действие сборки на встроенный ресурс, затем напишите следующее:

using (Stream stream = typeof(MyClass).Assembly.GetManifestResourceStream("MyNameSpace.Something.xml")) {
    //Read the stream
}
13
ответ дан 24 November 2019 в 17:35
поделиться
  1. Добавьте файл в проект .
  2. Установите для свойства «Действие сборки» значение «Встроенный ресурс».
  3. Получите доступ следующим образом:

     GetType (). Module.Assembly.GetManifestResourceStream ("namespace.folder.file.ext") 
     

Обратите внимание, что строка имени ресурса является именем файл, включая расширение, которому предшествует пространство имен проекта по умолчанию. Если ресурс находится внутри папки, вы также должны включить его в строку .

(из http://www.dotnet247.com/247reference/msgs/1/5704.aspx , но я использовал его песонально)

3
ответ дан 24 November 2019 в 17:35
поделиться

Вы можете использовать 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();
8
ответ дан 24 November 2019 в 17:35
поделиться

Вы также можете добавить XML-файл в качестве ресурса, а затем адресовать его содержимое с помощью Resources.YourXMLFilesResourceName (в виде строки, то есть с помощью StringReader).

30
ответ дан 24 November 2019 в 17:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: