2

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

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

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

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

    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是同一个目录,但不应该。

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

4

1 回答 1

3

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

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

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

于 2013-09-30T19:03:05.587 回答