获取当前程序集的path

我如何获得当前程序集的path? 我需要从某些path相对于当前程序集(.dll)的位置获取数据。

我以为有人告诉我使用reflection命名空间,但我找不到任何内容。

您可以使用:

string path = (new System.Uri(Assembly.GetExecutingAssembly().CodeBase)).AbsolutePath; 

注释中的一些build议是通过System.Uri.UnescapeDataString (来自vvnurmi )来传递,以确保处理任何百分比编码,并使用Path.GetFullpath (来自TrueWill )来确保path是标准Windows窗体(而不是斜杠而不是反斜杠)。 以下是您在每个阶段获得的示例:

 string s = Assembly.GetExecutingAssembly().CodeBase; Console.WriteLine("CodeBase: [" + s + "]"); s = (new Uri(s)).AbsolutePath; Console.WriteLine("AbsolutePath: [" + s + "]"); s = Uri.UnescapeDataString(s); Console.WriteLine("Unescaped: [" + s + "]"); s = Path.GetFullPath(s); Console.WriteLine("FullPath: [" + s + "]"); 

输出如果我们正在运行C:\Temp\Temp App\bin\Debug\TempApp.EXE

 CodeBase:[file:/// C:/ Temp / Temp App / bin / Debug / TempApp.EXE]
 AbsolutePath:[C:/Temp/Temp%20App/bin/Debug/TempApp.EXE]
未转义:[C:/ Temp / Temp App / bin / Debug / TempApp.EXE]
完整path:[C:\ Temp \ Temp App \ bin \ Debug \ TempApp.EXE]

System.Reflection. AssemblyGetExecutingAssembly()Location

只是要说清楚:

 Assembly.GetExecutingAssembly().Location 

我更喜欢

 new System.Uri(Assembly.GetExecutingAssembly().EscapedCodeBase).LocalPath; 

EscapedCodeBase涵盖了您的本地path中可能包含无效的URI字符的情况(请参阅https://stackoverflow.com/a/21056435/852208

LocalPath包含本地path和uncpath的完整path,其中AbsolutePath修剪掉“\\ server”