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

.NET Standard 2.0类库如何在Web及命令行应用中定位同目录XML资源

可行方案

方案1:通过CodeBase属性准确定位同目录XML文件

该方案不受IIS shadow copy机制影响,适配所有类型的宿主应用:

using System.Reflection;
using System.IO;

// 核心定位逻辑
var currentAssembly = Assembly.GetExecutingAssembly();
UriBuilder uriBuilder = new UriBuilder(currentAssembly.CodeBase);
string assemblyRawPath = Uri.UnescapeDataString(uriBuilder.Path);
string dllDirectory = Path.GetDirectoryName(assemblyRawPath);
// 替换为你的XML文件名
string targetXmlPath = Path.Combine(dllDirectory, "your_config.xml");

原理说明:Assembly.CodeBase返回的是程序集原始部署位置的URL,不会被shadow copy机制影响,转换成本地路径后就能直接拿到类库DLL所在的bin目录,和你设置的「Content+始终复制」的部署规则完全匹配。

方案2:路径交由上层宿主应用传入(更灵活的规避方案)

如果需要支持管理员自定义配置文件存放位置,可以选择该方案:

  • 类库对外提供路径配置入口,可通过静态属性、构造函数参数、初始化方法参数等方式暴露
  • 由引用类库的Web/WinForm/控制台应用根据自身的技术栈,传入配置文件的完整路径
  • 类库内部仅做路径合法性、文件存在性校验即可,无需处理跨类型应用的路径适配逻辑
  • 管理员可根据部署需求,将XML文件放在任意有权限的目录,不需要强制和类库DLL同目录
原有方案失效原因
  • Assembly.GetExecutingAssembly().Location:IIS默认开启shadow copy,会将加载的程序集复制到临时目录运行,该属性返回的是临时目录路径,不是原始部署路径
  • Environment.GetCurrentDirectory():返回的是宿主进程的工作目录,不同类型应用的默认工作目录差异极大,不固定
  • System.Web.Hosting.HostingEnvironment.MapPath是ASP.NET Framework专属API,.NET Standard类库无法直接引用,也不兼容非Web类应用

内容的提问来源于stack exchange,提问作者user256890

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:24:02