为什么工作目录是可执行文件的目录而不是我从哪里运行?

时间:2013-09-30 18:43:33

标签: c# .net console-application working-directory

我正在从一个普通的命令提示符运行我的控制台应用程序。我正在以两种方式运行它:

  1. 使用我认为是工作目录的可执行文件的相对路径。即。

    C:\Working>.\path\to\my.exe -fileToRead file.txt

  2. 使用$ PATH $中的文件夹。即。

    C:\Working>my.exe -fileToRead file.txt

  3. file.txt位于 C:\ Working 中,my.exe C:\ Working \ path \ to my.exe将XML日志文件输出到工作目录。在我看来,那应该是C:\ Working,但文件实际上最终在 C:\ Working \ path \ to 中。这与所有其他命令行应用程序无关。

    我没有做任何奇怪或非标准的事情(我知道)。我曾尝试使用XML文件的文件名"TestResult.xml"Path.Combine(Environment.CurrentDirectory, "TestResult.xml")。两者最终都在可执行文件目录中,而不是我正在运行的目录。正确读取命令行参数文件参数,所以我知道它正在工作。

    澄清:基本上,我的问题是Environment.CurrentDirectoryAssembly.GetExecutingAssembly().Location是同一个目录,但不应该是。

    我在这里做错了什么?我如何获取执行的目录,而不是可执行文件的路径? (我意识到我在stackoverflow上有很多问题的完全相反的问题)

1 个答案:

答案 0 :(得分:3)

使用Environment.CurrentDirectory的结果不是我用这样一个非常简单的程序得到的结果

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Environment=" + Environment.CurrentDirectory);
            Console.WriteLine("Assembly=" + Assembly.GetExecutingAssembly().Location);
        }
    }
}

从命令行执行这个小应用程序始终为第一行提供运行命令提示符的目录,第二行始终为程序集所在的目录。
所以,我想你的问题是由不同的东西引起的。可能是当前目录的变化。