为什么 AppDomain.CurrentDomain.BaseDirectory 在控制台应用程序中以 bin 目录为目标?
Why is AppDomain.CurrentDomain.BaseDirectory targeting bin catelog in console application?
我有一个控制台应用程序。在这个应用程序中,我创建了一个 class 库项目,我在主项目中引用了它。在这个 class 库中,我有一个我想要获取的文件。代码:
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\
该文件在 classlibrary 项目中,正如我之前所说,这在 .net web api 项目
中工作正常
为什么会这样?
编辑:
Directory.GetCurrentDirectory()
Returns同路
AppDomain.CurrentDomain.BaseDirectory
不是由程序集定义的,而是由托管环境定义的(即 应用程序 或 服务 )。
构建控制台应用程序后,您的可执行程序和附属程序集将转到 *.csproj
文件中定义的输出路径。默认为 bin$(Configuration)
(例如:bin\Debug
)。
由于整个可执行文件都在输出路径中执行,因此这是基本目录。
为什么 ASP.NET WebAPI 项目在您的案例中运行良好?可能是因为您在 IIS 中托管 ASP.NET WebAPI。如果您使用托管在 Windows 服务中的 OWIN/Katana 来执行此操作,您最终会遇到同样的问题。
我有一个控制台应用程序。在这个应用程序中,我创建了一个 class 库项目,我在主项目中引用了它。在这个 class 库中,我有一个我想要获取的文件。代码:
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\
该文件在 classlibrary 项目中,正如我之前所说,这在 .net web api 项目
中工作正常为什么会这样?
编辑:
Directory.GetCurrentDirectory()
Returns同路
AppDomain.CurrentDomain.BaseDirectory
不是由程序集定义的,而是由托管环境定义的(即 应用程序 或 服务 )。
构建控制台应用程序后,您的可执行程序和附属程序集将转到 *.csproj
文件中定义的输出路径。默认为 bin$(Configuration)
(例如:bin\Debug
)。
由于整个可执行文件都在输出路径中执行,因此这是基本目录。
为什么 ASP.NET WebAPI 项目在您的案例中运行良好?可能是因为您在 IIS 中托管 ASP.NET WebAPI。如果您使用托管在 Windows 服务中的 OWIN/Katana 来执行此操作,您最终会遇到同样的问题。