我遇到了一个相当复杂的SSRS问题。
首先,我们正在使用本地报告。我们必须这样做,因为我们使用的数据来自休息服务。
其次,我们为报告构建了一个自定义库,名为ReportFunctions,我们想要使用它。
我们正在使用sql server数据工具来构建.rdl(不要与RDLC混淆)然后我们将文件复制到我们的VS项目中。我们将构建操作设置为Content,将Copy设置为New。
这适用于我们所有的基本报告。我们甚至可以使用自定义库。
现在我们想要将其中一些基本报告用作子报告。我们将此报告称为“AllReports”。它由“SummaryReport”和“DetailReport”组成。
摘要和详细信息是两个RDL文件,也需要单独加载。
在构建AllReports的代码中,我有:
reportViewer.LocalReport.SubreportProcessing += LocalReport_SubreportProcessing;
reportViewer.LocalReport.LoadSubreportDefinition("SummaryReport", File.OpenText(Server.MapPath("SummaryReport.rdl")));
reportViewer.LocalReport.LoadSubreportDefinition("DetailReport", File.OpenText(Server.MapPath("DetailReport.rdl")));
private void LocalReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e)
{
//Set e.DataSources here depending on e.ReportPath
}
当我运行SummaryReport或DetailReport时,它们运行正常。当我运行AllReports时出现错误:
在指定位置C:\ path \ to \ my \ project \ Reports \ SummaryReport.rdlc中找不到子报告“SummarySubreport”。请验证子报表是否已发布且名称是否正确。
为了好玩,我将两个子报表的扩展名切换为.rdlc然后当我在visual studio中编译时出现构建错误:
加载代码模块时出错:'ReportFunctions,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = d88351e3d4dffe2f'。详细信息:无法加载文件或程序集“ReportFunctions,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = d88351e3d4dffe2f”或其依赖项之一。系统找不到指定的文件。
DetailReport是使用自定义函数外部库的那个。
我不能将我的DLL放在服务器上的任何地方,除了在项目的bin中。我不能强调这一点。我也无法转移到服务器报告。我必须使用本地报告。
如果我在RDLC上将构建操作设置为None,它可以工作,但是当我部署我的RDLC时,不会发布。
我可以编译RDLC吗?我缺少什么使我的报表查看器使用RDL而不是RDLC用于我的子报表?
答案 0 :(得分:0)
在解决这个问题11个小时后,我发现构建服务器在构建时为所有库分配了修订号。因此,本地ReportFunctions将被赋予1.0.0.0作为版本,一切都很酷。然后,当它被部署时,构建服务器将执行其操作并且报告将中断。
对于遇到此问题的其他人,请检查已编译DLL的版本号,尤其是在使用构建过程时。
另外,为了解决RDLC的编译问题,我们将构建操作切换为None,并且我们设置构建服务器以在构建成功后手动复制任何RDLC文件。