Подтвердить что ты не робот

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

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

Любая идея?

4b9b3361

Ответ 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

  • Добавьте файл в проект.
  • Задайте для свойства "Build Action" значение "Embedded Resource".
  • Доступ к этому способу:

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

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

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