c# - 为什么 AppDomain.CurrentDomain.BaseDirectory 的目标是控制台应用程序中的 bincatelog?

标签 c# console-application

我有一个控制台应用程序。在此应用程序中,我创建了一个类库项目,我在主项目中引用了该项目。在这个类库中,我有一个我想要获取的文件。代码:

public static string GetPath(string fileName)
{
    char separator = Path.DirectorySeparatorChar;
    string startupPath = AppDomain.CurrentDomain.BaseDirectory;
    string[] pathItems = startupPath.Split(separator);
    string projectPath = string.Join(separator.ToString(),
        pathItems.Take(pathItems.Length - 1)) + ".Handler";
    string path = Path.Combine(projectPath, "WebRequestHandlers\\Files" + separator + fileName);

    return path;
}

我之前在 .net web 项目中使用过它并且它有效,但由于某种原因这是我的 AppDomain.CurrentDomain.BaseDirectory:

C:\projects\OverWatchServerCall\OverWatchServerCall\bin\Debug\

应该是:

C:\projects\OverWatchServerCall\OverWatchServerCall\

该文件位于类库项目中,正如我之前所说,它在 .net web api 项目中运行良好

为什么会发生这种情况?

编辑:

Directory.GetCurrentDirectory()

返回相同的路径

最佳答案

AppDomain.CurrentDomain.BaseDirectory 不是由程序集定义的,而是由托管环境(即应用程序服务)定义的。

构建控制台应用程序后,您的可执行文件和附属程序集将转到 *.csproj 文件中定义的输出路径。默认为 bin\$(Configuration)(例如:bin\Debug)。

由于整个可执行文件在输出路径中执行,因此这是基目录。

为什么 ASP.NET WebAPI 项目在您的案例中运行良好?可能是因为您在 IIS 中托管 ASP.NET WebAPI。如果您使用 Windows 服务中托管的 OWIN/Katana 来执行此操作,您最终会遇到相同的问题。

关于c# - 为什么 AppDomain.CurrentDomain.BaseDirectory 的目标是控制台应用程序中的 bincatelog?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36153093/

相关文章:

c++ - 如何处理 wxWidgets 控制台应用程序中的关键事件?

c# - 无法在 VS2019 C# 上更改 Console.Title

c# - 登录控制台应用程序(带有 DI 的 .NET Core)

c# - 使用 WMI 获取 C# 中每个进程的 CPU 和 RAM 使用情况?

c# - 格式化日志的好方法是什么?

c# - 取消对 SSRS 的长时间运行的异步 WCF 调用

c# - 从控制台应用程序记录 SOAP 消息

Delphi - 从 SW_HIDE 状态显示控制台应用程序

c# - 找出两个可无余数整除的数

c# - 如何将 sql(导出)表批量复制到 .Net 中的 csv 或 tsv 文件?