为什么AppDomain.CurrentDomain.BaseDirectory在控制台应用程序中定位bin catelog?

时间:2016-03-22 11:23:19

标签: c# console-application

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

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网站项目中使用过它已经有效了但是由于某种原因这是我的AppDomain.CurrentDomain.BaseDirectory:

  

C:\项目\ OverWatchServerCall \ OverWatchServerCall \ BIN \调试\

应该是:

  

C:\项目\ OverWatchServerCall \ OverWatchServerCall \

该文件位于classlibrary项目中,正如我之前所说,这在.net web api项目中工作正常

为什么会这样?

编辑:

Directory.GetCurrentDirectory()

返回相同的路径

1 个答案:

答案 0 :(得分:1)

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

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

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

为什么ASP.NET WebAPI项目在您的情况下运行良好?可能是因为您在IIS中托管ASP.NET WebAPI。如果你使用在Windows服务中托管的OWIN / Katana来做这件事,你最终会遇到同样的问题。