我有一个代码片段,可以在运行时从当前正在执行的目录中加载一些程序集。 该代码是可以托管在控制台应用程序/ 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调用可以提供预期的结果
答案 0 :(得分:1)
要检查当前存储的存储位置,您可以使用:
Assembly.GetExecutingAssembly().CodeBase
或者,如果您的代码位于库中,并且您可以使用GetEntryAssembly()
来搜索已启动的exe的位置。
codeBase采用URI语法。要获取路径(如果需要),您可以使用:
var path = new Uri(codeBase).AbsolutePath;