一个基本问题:
我有一个C#Windows应用程序,通过输入
从其自己的目录执行时运行正常program1.exe
但是当我从另一个目录执行它时给出了像
这样的完整路径d:/progs/myprog/program1.exe
它崩溃了。我真的需要这样做:)
我认为它与通过程序读取一些文件有关,这些文件位于同一目录中。我怀疑的是:
using (XmlReader OdczytywaczXML = XmlReader.Create(@"config.xml"))
可能是问题吗?我不想提供文件的完整路径,因为我希望我的程序只需复制文件即可在任何地方工作。
哦,我不知道如何在调试时模拟这种情况(从另一个目录运行) - 是否可能?
答案 0 :(得分:5)
在这种情况下,您应该检测您的程序位置并构建config.xml
的完整路径,例如:
var filePath = Path.Combine(
Path.GetDirectoryName(Assembly.GetEntryAssembly().Location),
@"config.xml");
要模拟条件,请转到项目属性,页面“调试”并设置Working Directory
。
答案 1 :(得分:2)
这肯定是问题所在。您可以在该行添加目录信息。在WinForms中,您可以使用Application.StartupPath
作为示例。
一般情况下,您可以使用System.Reflection.Assembly.GetExecutingAssembly().Location
答案 2 :(得分:1)
问题是当您从命令行执行它时Working Directory
不一样。你想要保护这个:
var path = Path.Combine(Assembly.GetExecutingAssembly().Location, "config.xml");
using (XmlReader OdczytywaczXML = XmlReader.Create(path))
Location
属性将为您执行以下操作:
获取包含清单的已加载文件的完整路径或UNC位置。
此处需要注意的一点是,如果您在Desktop
添加了快捷方式并在更改代码之前设置了Working Directory
,,您会发现应用程序运行正常。首先要验证修复是否有效。