Загрузка ресурсов из другого проекта? - PullRequest
1 голос
/ 05 декабря 2011

Я пытаюсь загрузить файл XML из отдельного проекта;Одним из таких проектов является игровой движок, который вызывает программу чтения XML-документов и получает путь, указывающий относительный каталог к ​​файлу.

From Engine

XDocument doc;

            try
            {
                Stream stream = this.GetType().Assembly.GetManifestResourceStream(path);

                doc = XDocument.Load(stream);
            }
            catch
            {
                doc = XDocument.Load(path);
            }

Из другого проекта

string filePath = "Test.xml";

Npc npc = new Npc("somename", 2,filePath);

Test.xml находится в корневом каталоге другого проекта.Конструктор Npc вызывает конструктор объекта Statistics, который затем вызывает метод, который загружает XDocument.Когда это происходит, filePath просто пропускается вниз через слои.

Я посмотрел на это и попробовал пример встроенного ресурса, который в конечном итоге и являетсяпытаясь выполнить, и это не сработало для меня.

Что я здесь не так делаю?

Обновление

Я изменил Text.xml на Chronos.Text.xml, так как именно там находится файл,В моем отладчике я вижу, что поток просто возвращает ноль, когда я использую это как путь:

try
{
    Stream stream = this.GetType().Assembly.GetManifestResourceStream("Chronos.Test.xml"); //returns null

    doc = XDocument.Load(stream); //Exception thrown
}
catch
{
    doc = XDocument.Load(path); //File not found
}

1 Ответ

1 голос
/ 05 декабря 2011

Внедренные ресурсы встраиваются непосредственно в исполняемый файл.Assembly.GetManifestResourceStream() пытается открыть поток на внедренном ресурсе; вам нужно указать имя ресурса в следующем формате AssemblyDefaultNamespace.Directory.Filename.

Если вы пытаетесь открыть файл XML из другого каталога,вам нужно будет указать полный путь к XDocument.Load() или относительный путь из выходного каталога вашего текущего проекта, указывающий на этот другой каталог.

Другим решением будет копирование данных издругой проект в ваш проект и укажите, что вы хотите, чтобы файл был скопирован в ваш выходной каталог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...