C#编译生成的DLL如何读取同目录下的XML配置文件
C# DLL自动读取同目录XML配置文件实现方案
问题根源
默认使用相对路径读取文件时,C# 会以主程序的工作目录作为基准路径,而非DLL自身所在目录,因此会出现DLL和配置文件同目录也无法读取的问题。
核心实现方法
通过反射获取当前DLL程序集的所在路径,拼接配置文件名后读取即可。
依赖命名空间
using System.Reflection; using System.IO; using System.Xml.Linq; // 可根据自己的XML读取方式调整命名空间
基础版本代码(适用常规桌面/服务场景)
// 获取当前执行DLL的完整路径 string dllFullPath = Assembly.GetExecutingAssembly().Location; // 提取DLL所在的目录路径 string dllFolderPath = Path.GetDirectoryName(dllFullPath); // 拼接得到配置文件的完整路径 string configFilePath = Path.Combine(dllFolderPath, "conf.xml"); // 读取XML配置示例(可替换为自己的XML读取逻辑) if (File.Exists(configFilePath)) { XDocument configXml = XDocument.Load(configFilePath); // 后续解析XML的业务逻辑 } else { // 配置文件不存在的异常处理逻辑,比如抛出异常、返回默认配置等 throw new FileNotFoundException("配置文件conf.xml不存在,请确认和DLL放在同一目录下", configFilePath); }
兼容版本代码(适用ASP.NET等影子复制场景)
如果DLL运行在开启影子复制的环境下(比如ASP.NET默认部署场景),Assembly.Location会返回影子复制后的临时路径,此时改用CodeBase属性获取原始路径:
Uri codeBaseUri = new Uri(Assembly.GetExecutingAssembly().CodeBase); string dllFullPath = Uri.UnescapeDataString(codeBaseUri.LocalPath); string dllFolderPath = Path.GetDirectoryName(dllFullPath); // 后续拼接配置路径、读取的逻辑和基础版本完全一致
开发阶段配置注意项
在Visual Studio中把项目里的conf.xml文件的「复制到输出目录」属性设置为如果较新则复制,编译时会自动把配置文件和DLL同步输出到生成目录,减少部署时漏拷文件的问题。
内容的提问来源于stack exchange,提问作者AlexDevelop29
相关产品推荐
相关产品推荐

