c# – Directory.GetCurrentDirectory()根据命令行参数返回不同的结果

我希望有人可以解释为什么Directory.GetCurrentDirectory()根据我将命令行参数传递给应用程序的方式返回不同的结果(使用args运行vs在app.exe上拖动文件夹)

要直接进入它,请考虑以下代码

public class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("The current directory is {0}",Directory.GetCurrentDirectory());

        if(args != null && args.Any())
            Console.WriteLine("Command line arguments are {0}",String.Join(",",args));

        Console.ReadLine();
    }
}

如果使用命令提示符构建并运行它,如下所示,则输出就是您所期望的.它将输出应用程序所在的当前目录.

C:\Projects\ArgumentTest\ApplicationA\bin\Debug\ApplicationA.exe C:\mydirectory
The current directory is C:\Projects\ArgumentTest\ApplicationA\bin\Debug\
Command line arguments are C:\mydirectory

如果通过在应用程序上拖动文件文件夹来构建和运行此程序,则会得到不同的结果.而不是返回预期的结果而不是Directory.GetCurrentDirectory()返回您在应用程序上拖动的第一个文件的路径.

我现在有一个解决这个问题的方法,但我很想知道为什么会这样.

其他信息:

> .NET 4.5
> Windows 2012R2(虚拟机)
>机器的完全管理员权限

希望有人可以提供一些见解.

解决方法

我认为这里的问题是你的期望.特别是这一点:

It will output the current directory the application resides in.

这不是我对GetCurrentDirectory()的期望.当前目录是调用上下文的一个功能,而不是应用程序.如果我通过完整或相对路径(而不仅仅是foo.exe)运行可执行文件,我希望GetCurrentDirectory()返回我所在的目录 – 而不是应用程序所在的目录.在拖动文件的情况下它:坦率地说,GetCurrentDirectory()在很大程度上是未定义的,但第一个文件的目录并不合理.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...