Какое решение относительно относительного пути является лучшим для разработки / развертывания приложений WPF с локальными хранилищами XML? - PullRequest
0 голосов
/ 11 июня 2009

У меня есть приложение WPF, которое сохраняет свои данные в файлы XML в каталоге относительно кода , который называется «Данные».

Я получаю относительный путь к каталогу данных с помощью следующих методов:

protected string ApplicationPath
{
    get { return System.IO.Path.GetDirectoryName(System.Reflection.Assembly
          .GetExecutingAssembly().CodeBase); }
}

protected string ApplicationDataPath
{
    get { return ApplicationPath + @"..\..\..\Data\"; }
}

public string FullXmlDataStorePathAndFileName
{
    get
    {
        return ApplicationDataPath + GetItemTypeIdCode() + ".xml";
    }
}

Это работает для тестирования, поскольку Debug или Relates .exe вернутся обратно в проект и получат доступ к данным.

Проблема №1 в том, что он не работает при сохранении XML-файла, я получаю сообщение об ошибке " URI форматы недействительны ", похоже, он не может справиться с "... ... \ "часть пути при сохранении:

xmlDoc.Save(FullXmlDataStorePathAndFileName);

Проблема №2 заключается в том, что когда я хочу развернуть свое приложение (например, сделать его доступным для загрузки, чтобы кто-то разархивировал и дважды щелкнул по файлу .exe), тогда файлы .xml должны находиться в одном каталоге как .exe или один ниже в каталоге Data, чтобы каждый экземпляр приложения мог читать и записывать в свои собственные XML-файлы.

Какое для этого лучшее решение? Требования:

  • XML-файлы должны быть локально в рамках проекта и прозрачными при разработке и тестировании, например, отредактируйте XML-файлы в Visual Studio и выберите «Копировать в выходной каталог» «Копировать, если новее», , поэтому при разработке базовые данные всегда обновляются при нажатии F5

  • прямой путь, например, архивирование каталога «Release» и все файлы (.exe и исходные файлы XML) находятся там, а пути в .exe указывают на файлы XML при запуске

Кто-нибудь разработал хорошее решение для размещения локального источника данных XML в относительном каталоге, подобном этому?

Ответы [ 2 ]

2 голосов
/ 11 июня 2009

Ваш XML-путь может быть в отдельном конфигурационном файле?

Или вы можете использовать условные выражения (#if DEBUG / #endif), чтобы иметь отдельную логику для отладочной версии.

Но я бы порекомендовал более подходящее место для таких данных, например, (системный диск) \ Users \ UserName \ AppData \ Roaming \ AppName (и т. Д.). Если ваше приложение установлено в Program Files, то вашему приложению потребуются дополнительные разрешения для сохранения файлов там. В Vista это будет означать, что вам придется запускать приложение с повышенными привилегиями, даже если ваша учетная запись имеет права администратора (с включенным UAP).

1 голос
/ 12 июня 2009

Возможно, я неправильно понял вопрос, но если ваш XML-файл установлен на «Копировать в выходной каталог - Копировать, если новее», то вы сможете получить к нему доступ непосредственно в папке bin \ Debug. Таким образом, на ваш XML-файл можно ссылаться в той же папке, что и исполняемый файл, при отладке и при развертывании.

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