【问题标题】:GetCurrentDirectory() returns AppData\Local\TempGetCurrentDirectory() 返回 AppData\Local\Temp
【发布时间】:2020-02-11 11:29:24
【问题描述】:

我尝试使用 GetCurrentDirectory() 方法获取我的项目目录,但返回 AppData\Local\temp 目录。

我尝试使用 AppContext.BaseDirectory,这有效,但属性返回 C:\\projectName\\projectName\\bin\\Debug\\,我只想要 C:\\projectName\\projectName\\

我也试过

string currentPath = findCurrentPath.Replace("\\projectName\\bin\\Debug\\", "");
archivePath = $@"{currentPath}\Image_Senarios_projectName\{imageName}";

它在我的电脑上运行,但是这个项目在多台电脑上运行,并且在其中一台电脑上这个方法返回

"C:\Jenkins\workspace_crm_aut\5.3.59\CrmAutomacao\Web\Automacao\projectName\projectName\bin\Release\\"

所以我试了一下

string findCurrentPath = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName;

但它返回 C:\Users\nameUser\AppData

【问题讨论】:

  • 您的项目,即源代码,在运行应用程序时毫无意义。它只是一个目录,就像其他任何目录一样。没有像“获取项目目录”这样的功能,因为通常情况下,应用程序与源代码不在同一台计算机上。 exe文件在bin\debug中,这就是你可以找到的。
  • 正如 Holger 指出的,源代码的位置和构建输出应该与可执行文件及其运行方式无关。您将开发/构建细节与应用程序的运行时执行紧密耦合。我建议您寻找另一种在运行时为应用程序提供您感兴趣的路径的方法。假设这是一个控制台应用程序,您可以将其作为 arg 传递并以 args[0] 的形式获取。如果您的代码在 Web 应用程序的上下文中运行,则可以使用框架 API 来检索网站的基本目录。
  • 我可以理解为什么在我的计算机上返回 temp 目录而在另一台计算机上使用相同的代码返回项目目录。

标签: c#


【解决方案1】:

对我来说也是如此——我从 Nunit 运行了一些测试,并为测试用例源提供了静态方法。在这种情况下,它是 Nunit 控制台所在的路径(或其某些文件)。

对我有用的命令:

NUnit.Framework.Internal.AssemblyHelper.GetAssemblyPath(typeof(PieceTests).Assembly);

你也可以查一下:How do I get the path of the assembly the code is in?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    相关资源
    最近更新 更多