我有一个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数据源开发了一个很好的解决方案?
答案 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文件。