You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:15:04