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


    自已遇到了这个问题,情况和这位仁兄的差不多:“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 ";   ”

    that’s it,希望本文能对您有所帮助,祝编程愉快,并祝春节快乐!

    Enjoy!

  • 相关阅读:
    软件测试的策略是什么?
    软件产品质量特性是什么?
    软件质量保证体系是什么 国家标准中与质量保证管理相关的几个标准是什么?他们的编号和全称是什么?
    简述什么是静态测试、动态测试、黑盒测试、白盒测试、α测试 β测试
    mac上的GNU gcc报错:dyld: Library not loaded: /usr/local/opt/isl/lib/libisl.22.dylib的解决办法
    两行信息量大的shell代码
    mac上的less使用扩展正则表达式比如
    设置mac默认使用GNU工具,比如使用GNU cat而不是BSD cat
    macos 10.15/Catalina 用不了gdb
    vscode的coderunner插件介绍
  • 原文地址:https://www.cnblogs.com/fhmsha/p/c_sharp_winform_can_not_find_xml_ini_datafiles_when_published.html
Copyright © 2020-2023  润新知