使用本地XML存储开发/部署WPF应用程序的最佳相对路径解决方案是什么?

时间:2009-06-11 10:14:12

标签: c# wpf xml linq-to-xml

我有一个WPF应用程序,它将数据保存到名为“Data”的 relative-to-code 目录中的XML文件中。

我使用以下方法获取相对路径到Data目录:

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文件应该在项目的本地,并且在开发和测试时是透明的,例如:在Visual Studio中编辑XML文件,“复制到输出目录”是“如果更新则复制”,因此在开发时,按F5时基本数据总是刷新

  • 一种直接的方法,例如压缩“Release”目录并且所有文件(.exe和原始XML文件)都存在,并且.exe​​中的路径在启动时指向XML文件

是否有人为这样的相对目录中的本地XML数据源开发了一个很好的解决方案?

2 个答案:

答案 0 :(得分:2)

您可以将xml路径放在单独的配置文件中吗?

或者您可以使用条件(#if DEBUG / #endif)为您的调试版本提供单独的逻辑。

但是我会建议一个更适合这种数据的地方,比如(系统盘)\ Users \ UserName \ AppData \ Roaming \ AppName(等)。如果您的应用程序安装在Program Files中,那么您的应用程序需要其他权限才能在那里保存文件。在Vista中,这意味着您必须使用提升的权限运行您的应用,即使您的帐户是管理员(已启用UAP)。

答案 1 :(得分:1)

也许我误解了这个问题,但是如果您的XML文件设置为“Copy to Output Directory - Copy if newer”,那么您应该可以直接在bin \ Debug文件夹中访问它。因此,在调试和部署时,可以在与exe相同的文件夹中引用xml文件。

相关问题