如何通过GetExecutingAssembly()可靠动态获取配置文件夹完整路径?
动态获取配置文件夹路径的最优方案
方案一:基于应用程序基目录(推荐)
直接使用AppDomain.CurrentDomain.BaseDirectory获取程序部署的根目录,再结合配置文件夹相对于根目录的直接相对路径(无需../../这类层级跳转),最后用Path.GetFullPath解析成完整路径。这种方式不依赖程序集的具体存放位置,适配所有部署场景。
示例代码:
// 获取程序部署根目录 string appBaseDir = AppDomain.CurrentDomain.BaseDirectory; // 配置文件夹相对于根目录的路径(比如根目录下的Core/api/data) string configRelativePath = @"Core/api/data/"; // 生成完整路径 string fullConfigPath = Path.GetFullPath(Path.Combine(appBaseDir, configRelativePath));
方案二:基于程序集目录的相对定位
如果配置文件夹和程序集的相对位置固定(比如始终在程序集所在目录的上两级),可以先获取程序集所在目录,再通过Path.GetFullPath自动解析层级跳转,避免依赖特定文件夹名称(比如/Assembly/)。
示例代码:
// 获取程序集所在的文件夹路径 string assemblyDir = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); // 从程序集目录向上两级,再定位到api/data string fullConfigPath = Path.GetFullPath(Path.Combine(assemblyDir, @"../../api/data/"));
Path.GetFullPath会自动处理路径中的../,无论程序集在什么目录下,只要相对层级正确就能得到有效路径。
方案三:嵌入资源(适合单个配置文件)
如果配置文件数量少,可以将其设置为嵌入资源(在文件属性里设置“生成操作”为“嵌入的资源”),直接通过程序集读取,完全避开路径问题:
示例代码:
var assembly = System.Reflection.Assembly.GetExecutingAssembly(); // 资源名称格式:命名空间.文件夹.文件名,比如MyProject.Core.api.data.config.json using Stream stream = assembly.GetManifestResourceStream("MyProject.Core.api.data.config.json"); // 读取流内容 using StreamReader reader = new StreamReader(stream); string configContent = reader.ReadToEnd();
内容的提问来源于stack exchange,提问作者irl_steve
相关产品推荐
相关产品推荐

