ASP.NET MVC发布本地IIS后RDLC文件路径定位失败求助
解决RDLC报表发布到IIS后的路径问题
方法1:由Web主项目传递报表根路径给报表类库
- 在Web项目的控制器或服务代码里,先获取应用根目录下的报表文件夹路径,再传给类库的报表生成方法:
// Web项目内的代码 string reportRootPath = Server.MapPath("~/bin/Reports"); // 调用类库的报表生成逻辑,传入路径参数 var reportGenerator = new ReportLibrary.ReportGenerator(); reportGenerator.GenerateReport(reportRootPath, "LOI - MMP.rdlc"); - 类库中直接用传入的路径拼接完整报表路径:
public void GenerateReport(string reportRootPath, string reportFileName) { string fullReportPath = Path.Combine(reportRootPath, reportFileName); // 后续加载报表的业务逻辑 }
方法2:类库中直接通过Web应用域获取根目录
- 类库中引用
System.Web程序集后,用HttpRuntime获取Web应用的根目录,再拼接报表路径:
注意:这种方式只适用于类库在Web环境下运行的场景。// 报表类库中的代码 string webRootPath = HttpRuntime.AppDomainAppPath; string fullReportPath = Path.Combine(webRootPath, "bin", "Reports", "LOI - MMP.rdlc");
方法3:调整报表文件的发布配置
- 把RDLC文件移到Web项目的
Reports文件夹下,设置文件的复制到输出目录属性为「始终复制」或「如果较新则复制」。 - 发布后报表会存放在
C:\inetpub\wwwroot\CashtreaSubsystem\Reports,类库中可以这样获取路径:string fullReportPath = Path.Combine(HttpRuntime.AppDomainAppPath, "Reports", "LOI - MMP.rdlc");
关键注意事项
- 禁止用
../这类相对路径定位报表,发布后类库的执行目录和Web项目目录不一致,相对路径会直接失效。 - 确保IIS应用程序池对报表所在文件夹有读取权限,避免因权限不足导致文件读取失败。
内容的提问来源于stack exchange,提问作者Lowie
相关产品推荐
相关产品推荐

