winform(C#)程序发布后找不到文件(xml,ini,etc...)的解决方法

分类:软件开发| 发布:camnprbubuol| 查看: | 发表时间:2010/12/2

做WinForm时,自已遇到了这个问题,情况和这位仁兄的差不多:“winform程序发布后,找不到菜单存储文件(xml文件)”。

情景再现:在c#winform项目中建立一个XML数据文件在\data\demo.xml中,另有一些图片文件在\images\目录中,发布后安装在其它电脑上面,调试时没有问题,运行时会报“未找到路径:C:\Documents and Settings\we\Local Settings\Apps\2.0\PXXV1GOP.VTC\…”之类。但是图片的调用没有问题。

解释一下几个相关问题:

  • 为什么会安装在这么奇怪的路径中?

这个问题可能要问MS了,不过从vs2003以来,C#的 winform发布后的程序都会自动安装在X:\Documents   and   Settings\用户名\Local   Settings\Apps\[.net版本]…的目录中,可能是为了方便程序的升级、卸载、版本回滚等,可以跟vista以后的平台配合。

  • 程序调试时如何调用本地XML文件?

如果XML数据文件位于\Data\demo.xml,那在程序调试的时候,应用程序的运行地址在:\bin\Debug\App.exe,所以引用时应该这样写:

XmlDocument objXmlDoc = new XmlDocument();
objXmlDoc.Load(@"..\..\Data\demo.xml");

也可以写成:objXmlDoc.Load(Application.StartupPath.ToString()+@"..\..\Data\demo.xml");

Application.StartupPath会返回应用程序所以在的位置。

  • 程序发布后为何找不到XML文件?它到哪去了?

跟据MS的思路,XML属于“数据文件”,而图片等属于“资源文件”,安装后所有的数据文件将被安装后其它目录,而资源文件会被放置到程序安装路径中。右键项目,点“属性”,在发布选项卡中点“应用程序文件…”会看到所有除了.cs的文件的发布状态,png是包括(自动发布),而xml是数据文件(自动发布)。

20090124

  • 如何让程序在发布后找到数据文件?

使用Application.CommonAppDataPath,它会自动指向程序的数据目录安装位置:

XmlDocument objXmlDoc = new XmlDocument();
objXmlDoc.Load(Application.CommonAppDataPath+@"\Data\demo.xml");


但是
如果是本机开发,Application.CommonAppDataPath在调试时不会指向你的项目目录,而是指向X:\Documents and Settings\用户名\Local Settings\Apps\[.net版本]…,所以在调试(Debug)时不能用它来加载XML文件。

  • 如何在不改变代码的情况下调试和发布我的项目?

可以用#if DEBUG,使用如下代码,可以看到如果不是Debug状态,加载数据文件的语句是灰色的,是不被执行的:

2009012401

当然,您也可以使用开始提到的那贴子中的方法:

1、首先打开项目属性---> 发布---> 应用程序文件---> 把frame\mune.xml文件的发布状态改为包括。
2、在引用路径的时候这么写“string strMenuXml=Directory.GetCurrentDirectory()+"\\frame\\mune.xml ";   ”

 

原链接:http://www.cnblogs.com/fhmsha/archive/2009/01/25/c_sharp_winform_can_not_find_xml_ini_datafiles_when_published.html

365据说看到好文章不转的人,服务器容易宕机
原创文章如转载,请注明:转载自郑州网建-前端开发 http://camnpr.com/
本文链接:http://camnpr.com/software-dev/111.html