3

通常当我用 C# 构建一个可以消化命令行参数的应用程序时,如果这些参数是文件路径字符串,我可以选择使用相对路径以及绝对路径来引用我计算机上的特定文件并在程序中使用它.

在我的上一个项目中,如果我从命令提示符给它一个相对路径,我的应用程序将无法工作。但是在 VS 2010 的调试模式下,它会消化相对路径。在命令提示符下,它需要一个绝对路径才能工作。

4

2 回答 2

4

您需要设置工作目录。请参阅:Directory.SetCurrentDirectory 方法

示例

System.IO.Directory.SetCurrentDirectory( System.AppDomain.CurrentDomain.BaseDirectory );

在调试版本中,当前目录默认设置为 debug\bin。

指定被调试程序的工作目录。在 Visual C# 中,工作目录是默认情况下从 \bin\debug 启动应用程序的目录。

http://msdn.microsoft.com/en-us/library/2kf0yb05.aspx

您还可以使用Assembly.GetEntryAssembly()Assembly.GetExecutingAssembly()检索程序集的路径,然后使用 Location 属性或 CodeBase 属性。

于 2012-08-10T14:07:37.003 回答
2

您可以自己将相对路径转换为绝对路径,如下所示:

if (!Path.IsPathRooted(path))
    path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\" + path;

或者将当前目录更改为可执行路径:

string exePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
Directory.SetCurrentDirectory(exePath);
于 2012-08-10T14:17:10.123 回答