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

本文关键字:运行 工作 可执行文件 为什么 | 更新日期: 2023-09-27 18:33:31

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

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

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

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

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

file.txtC:''Working 中,my.exeC:''Working''path''tomy.exe会将 XML 日志文件输出到工作目录。在我看来,这应该是 C:''Working,但文件实际上以 C:''Working''path''to 结束。这与所有其他命令行应用程序不符。

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

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

我在这里做错了什么?如何获取我执行的目录,而不是可执行文件的路径?(我意识到我在堆栈溢出上的许多问题中遇到了完全相反的问题(

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

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

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

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