// to get the location the assembly is executing from//(not necessarily where the it normally resides on disk)// in the case of the using shadow copies, for instance in NUnit tests,// this will be in a temp directory.string path = System.Reflection.Assembly.GetExecutingAssembly().Location;
//To get the location the assembly normally resides on disk or the install directorystring path = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
//once you have the path you get the directory with:var directory = System.IO.Path.GetDirectoryName(path);
// Get normal filepath of this assembly's permanent directoryvar path = new Uri(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase)).LocalPath;
using System;using System.IO;using System.Runtime.InteropServices;using System.Text;public class AppInfo{[DllImport("kernel32.dll", CharSet = CharSet.Auto, ExactSpelling = false)]private static extern int GetModuleFileName(HandleRef hModule, StringBuilder buffer, int length);private static HandleRef NullHandleRef = new HandleRef(null, IntPtr.Zero);public static string StartupPath{get{StringBuilder stringBuilder = new StringBuilder(260);GetModuleFileName(NullHandleRef, stringBuilder, stringBuilder.Capacity);return Path.GetDirectoryName(stringBuilder.ToString());}}}
您可以像使用应用程序一样使用它。StartupPath:
Console.WriteLine("The path to this executable is: " + AppInfo.StartupPath + "\\" + System.Diagnostics.Process.GetCurrentProcess().ProcessName + ".exe");
我没有看到任何人将. net Core反射提供的LocalPath转换为可用的系统。IO路径,这是我的版本。
public static string GetApplicationRoot(){var exePath = new Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).LocalPath;
return new FileInfo(exePath).DirectoryName;
}