3

一个基本问题:

我有一个 C# Windows 应用程序,它在从自己的目录执行时运行良好,通过键入

program1.exe

但是当我从另一个目录执行它时给出完整路径

d:/progs/myprog/program1.exe

它崩溃了。我真的需要这样做:)

我想它与程序在同一目录中读取一些文件有关。我怀疑的线路是:

using (XmlReader OdczytywaczXML = XmlReader.Create(@"config.xml"))

这可能是问题吗?我不想提供文件的完整路径,因为我希望我的程序只需复制文件就可以在任何地方工作。

哦,我不知道如何在调试时模拟这种情况(从另一个目录运行)——这可能吗?

4

3 回答 3

5

在这种情况下,您应该检测您的程序位置并构建完整路径config.xml,例如:

var filePath = Path.Combine(
    Path.GetDirectoryName(Assembly.GetEntryAssembly().Location),
    @"config.xml");

要模拟条件,请转到项目属性,页面“调试”并设置Working Directory

于 2013-11-13T16:16:33.083 回答
2

这肯定是问题所在。您可以在该行上添加目录信息。例如,您可以在 WinForms 中使用Application.StartupPath

一般来说,您可以使用System.Reflection.Assembly.GetExecutingAssembly().Location

于 2013-11-13T16:15:55.753 回答
1

问题是,Working Directory当您只是从命令行执行它时,它是不一样的。您需要保护这一点:

var path = Path.Combine(Assembly.GetExecutingAssembly().Location, "config.xml");
using (XmlReader OdczytywaczXML = XmlReader.Create(path))

Location物业将为您执行以下操作:

获取包含清单的已加载文件的完整路径或 UNC 位置。

这里要注意的一件事是,如果您在更改代码之前Desktop添加了快捷方式并设置了Working Directory,您会发现应用程序运行良好。首先执行此操作以验证修复是否有效。

于 2013-11-13T16:17:09.337 回答