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

如何以编程方式获取.NET程序集的正式文件夹位置而非影子复制路径?

获取程序集原始Bin文件夹路径(避开影子复制路径)

嘿,这个问题我之前也帮不少开发者解决过!确实,影子复制虽然方便了网站的发布更新,但想拿到程序集的原始部署位置(也就是网站的\bin文件夹)时,Assembly.GetExecutingAssembly().Location返回的总是复制后的临时路径,挺闹心的。别担心,有两种靠谱的方法可以搞定:

方法一:利用Assembly.CodeBase属性

这个属性会返回程序集的原始部署位置,而非影子复制后的路径。不过它返回的是带file://前缀的Uri格式,需要做一点转换:

using System.Reflection;
using System;
using System.IO;

// 获取程序集的CodeBase路径
string codeBase = Assembly.GetExecutingAssembly().CodeBase;
UriBuilder uriBuilder = new UriBuilder(codeBase);
// 转义Uri中的特殊字符并提取本地路径
string rawPath = Uri.UnescapeDataString(uriBuilder.Path);
// 获取路径对应的文件夹(即原始Bin文件夹)
string originalBinPath = Path.GetDirectoryName(rawPath);

原理是:影子复制只是把程序集复制到临时目录,CodeBase会保留程序集最初被加载的原始位置,也就是网站的Bin文件夹。

方法二:ASP.NET专属——HttpRuntime.BinDirectory

如果是ASP.NET应用,这个方法更直接,HttpRuntime.BinDirectory会直接返回网站的Bin文件夹绝对路径,不需要额外转换:

using System.Web;

string binFolderPath = HttpRuntime.BinDirectory;

注意这个方法需要引用System.Web程序集,仅适用于传统ASP.NET项目(.NET Framework)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:18:21