无论主机类型如何,如何获取当前执行目录

时间:2015-01-23 04:48:05

标签: c# asp.net

我有一个代码片段,可以在运行时从当前正在执行的目录中加载一些程序集。 该代码是可以托管在控制台应用程序/ Windows服务/ aspnet Web应用程序等中的库的一部分。

是否有单个API调用将提供运行代码的当前目录? 对于控制台/ Windows服务AppDomain.CurrentDomain.BaseDirectory;返回正确的 路径,但ASPNET应用程序中的相同调用返回虚拟根目录而不是路径 到Web应用程序的 [virtualroot] \ bin 目录。

对于ASPNET AppDomain.CurrentDomain.SetupInformation.PrivateBinPath;返回我想要的内容。

我可以像下面那样进行检查,这样无论主持人如何,我都能获得正确的路径:

 string path = AppDomain.CurrentDomain.SetupInformation.PrivateBinPath ??
               AppDomain.CurrentDomain.BaseDirectory;

这种启发式似乎有点hackish,我希望有一个API调用可以提供预期的结果

1 个答案:

答案 0 :(得分:1)

要检查当前存储的存储位置,您可以使用:

Assembly.GetExecutingAssembly().CodeBase

或者,如果您的代码位于库中,并且您可以使用GetEntryAssembly()来搜索已启动的exe的位置。

codeBase采用URI语法。要获取路径(如果需要),您可以使用:

var path = new Uri(codeBase).AbsolutePath;