2011-04-17 71 views
3

我使用添加到我的项目具有以下属性的XML文件:WPF C#XML文件添加为资源

Build Action : Resource 
Copy to output directory : Copy Always 

然后可执行文件运行时,我需要的用户能够编辑XML (添加,删除和修改节点)。可能吗 ?或者我需要将生成操作更改为内容?

感谢

编辑: 我已经删除并重新添加内容。 但现在我遇到了另一个问题:当我将它添加到项目中时,它会在应用程序根目录(WpfApplication1 \ WpfApplication1 \ myfile.xml)中查找它。 但是,当我运行应用程序时,负责添加节点的函数可以正常工作,但它将文件保存到WpfApplication1 \ WpfApplication1 \ bin \ Debug \目录中!因此“真正的”myfile.xml不会更新。

我使用:

XMLHosts.Load("myfile.xml"); 
XMLHosts.Save("myfile.xml"); 

和数据源声明为:

<XmlDataProvider x:Key="MyfileData" Source="myfile.xml" XPath="Books/Book" /> 
+0

似乎为我工作。尝试删除现有的输出目录并执行重建。另请参阅http://stackoverflow.com/questions/495505/copy-always-to-output-directory-does-not-work – 2011-04-17 15:07:18

回答

1

如果你想从磁盘加载的XML(和修改),利用生成操作=无和复制=始终复制。

您遇到的一个问题是,如果您将应用程序安装到“Program Files”,除非以管理员身份运行,否则无法在Windows Vista/7上编辑该文件。 - “程序文件”仅在安装期间可编辑。

一个好的做法是将xml复制到%APPDATA%\ Your app(APPDATA =环境变量,使用System.Environment进行访问)。您可以在安装期间或首次运行期间预制此副本。 %APPDATA%用于运行时可更改设置。

如果您将xml标记为无+ CopyAlways,则可以将其从执行目录复制到%APPDATA%\您的应用程序启动时的应用程序(如果尚未存在目标地址(如果尚未复制))。

然后,您可以从%APPDATA%\您的应用程序加载它并阅读最新设置。