如何在无HttpContext的ASP.NET(.NET4.7)子项目中加载内容文件?
解决ASP.NET(.NET 4.7)子项目加载静态文件的路径问题
针对你的场景,子项目的静态文件已复制到父Web项目的bin目录,但常规路径方法失效,可尝试以下两种有效方案:
方案一:利用AppDomain的私有Bin路径
Web项目的bin目录会被记录在AppDomain.CurrentDomain.SetupInformation.PrivateBinPath中,直接提取该路径拼接文件名即可:
using System; using System.IO; string privateBinPaths = AppDomain.CurrentDomain.SetupInformation.PrivateBinPath; // 若存在多个私有路径,取第一个(通常就是Web项目的bin目录) string binDir = privateBinPaths.Split(';')[0]; string targetFilePath = Path.Combine(binDir, "你的静态文件名.ext");
方案二:从程序集原始路径推导
由于ASP.NET的影子复制机制,Assembly.Location会返回临时目录,但CodeBase能获取程序集在父项目bin中的原始位置:
using System; using System.IO; using System.Reflection; // 获取程序集的原始代码基路径 Uri codeBaseUri = new Uri(Assembly.GetExecutingAssembly().CodeBase); string dllAbsolutePath = Uri.UnescapeDataString(codeBaseUri.AbsolutePath); // 从dll路径得到bin目录 string binDir = Path.GetDirectoryName(dllAbsolutePath); string targetFilePath = Path.Combine(binDir, "你的静态文件名.ext");
补充说明
你之前尝试的方法失效原因:
Assembly.GetExecutingAssembly().Location:影子复制机制会将程序集复制到临时目录运行,因此返回临时路径AppDomain.CurrentDomain.BaseDirectory:Web项目中该属性指向站点根目录(.csproj所在位置),而非bin目录Environment.CurrentDirectory/路径".":IIS Express运行时的工作目录是其自身安装目录,与项目目录无关
内容的提问来源于stack exchange,提问作者Mog0
相关产品推荐
相关产品推荐

