【转】C# winform程序发布后找不到数据文件(xml,ini,etc...)的解决
2010-08-10 15:58
459 查看
自已遇到了这个问题,情况和这位仁兄的差不多:“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,所以引用时应该这样写:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/
-->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是数据文件(自动发布)。
![](http://images.cnblogs.com/cnblogs_com/fhmsha/WindowsLiveWriter/Cwinformxmlinietc_BCEC/20090124_thumb_1.png)
如何让程序在发布后找到数据文件?
使用Application.CommonAppDataPath,它会自动指向程序的数据目录安装位置:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/
-->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状态,加载数据文件的语句是灰色的,是不被执行的:
![](http://images.cnblogs.com/cnblogs_com/fhmsha/WindowsLiveWriter/Cwinformxmlinietc_BCEC/2009012401_thumb.png)
当然,您也可以使用开始提到的那贴子中的方法:
1、首先打开项目属性---> 发布---> 应用程序文件---> 把frame/mune.xml文件的发布状态改为包括。
2、在引用路径的时候这么写“string strMenuXml=Directory.GetCurrentDirectory()+"//frame//mune.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,所以引用时应该这样写:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/
-->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是数据文件(自动发布)。
![](http://images.cnblogs.com/cnblogs_com/fhmsha/WindowsLiveWriter/Cwinformxmlinietc_BCEC/20090124_thumb_1.png)
如何让程序在发布后找到数据文件?
使用Application.CommonAppDataPath,它会自动指向程序的数据目录安装位置:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/
-->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状态,加载数据文件的语句是灰色的,是不被执行的:
![](http://images.cnblogs.com/cnblogs_com/fhmsha/WindowsLiveWriter/Cwinformxmlinietc_BCEC/2009012401_thumb.png)
当然,您也可以使用开始提到的那贴子中的方法:
1、首先打开项目属性---> 发布---> 应用程序文件---> 把frame/mune.xml文件的发布状态改为包括。
2、在引用路径的时候这么写“string strMenuXml=Directory.GetCurrentDirectory()+"//frame//mune.xml "; ”
相关文章推荐
- C# winform程序发布后找不到数据文件(xml,ini,etc...)的解决方法
- winform程序发布后找不到数据文件(xml,ini,etc...)的解决方法
- Visual Studio 在发布程序时找不到数据文件的一例解决方法[WPF中一定要将Build Action 设为Content]
- (C#) 发布程序,包含某些配置文件或数据文件。
- C#执行批处理,当批处理不在程序根目录时,出现“找不到文件”的问题的解决方法
- C#调用exe文件,IIS发布后无法掉用本地exe程序的解决方法
- C#中的数据库连接——WinForm程序中两份mdf文件问题的解决
- C#程序中:如何修改xml文件中的节点(数据)
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
- [C#] WinForm程序中两份mdf文件问题的解决
- C#调用exe文件,IIS发布后无法掉用本地exe程序的解决方法
- C#调用exe文件,IIS发布后无法掉用本地exe程序的解决方法
- C#程序中:如何修改xml文件中的节点(数据)
- C#程序中:如何修改xml文件中的节点(数据)(
- 程序发布后为何找不到XML文件?它到哪去了?
- C#程序发布在IIS7后,路径无法访问.apk文件的解决方法
- C#如何为winform程序打包发布应用(图解教程)
- C# Winform 调用系统接口操作 INI 配置文件的代码
- WinForm程序中两份mdf文件问题的解决
- myeclipse发布后classes文件夹里找不到xml等配置文件