Когда вы добавляете файл в ресурсы проекта, его содержимое попадает в одноимённое свойство как текст. Иными словами, ваш Properties.Resources.users
содержит текст XML документа, в то время как метод XDocument.Load
ожидает путь к файлу. Отсюда и ошибка, тот самый недопустимый знак из сообщения об ошибке - это <
.
Проще всего будет исправить ошибку заменив Load на Parse:
XDocument.Parse(Properties.Resources.users);
Однако, в таком случае вам придётся внимательно следить за кодировкой файла, потому что такой способ чтения не совсем корректен. Кодировка XML стандартно указывается в директиве <?xml
, а автогенерированный код по умолчанию считывает всё в кодировке по умолчанию.
Поэтому правильный способ считать XML из ресурсов требует, чтобы вы изменили в настройках ресурсов проекта способ представления файла со строкового на бинарный. В таком случае ваш Properties.Resources.users
станет массивом байт. и сможет быть считан следующим способом:
XDocument.Load(new MemoryStream(Properties.Resources.users));
Отмечу, что этот способ не устраняет проблему с кодировками, а просто позволяет указать правильную кодировку в самом файле.
Наконец, если вам хочется избежать копирования данных в промежуточный массив байт, есть смысл читать из потока напрямую. К сожалению, стандартный кодогенератор "уговорить" отдать вам поток не получится, поэтому придётся проигнорировать созданное им свойство и залезть напрямую в ResourceManager:
XDocument.Load(Properties.Resources.ResourceManager.GetStream("users", Properties.Resources.Culture));